python - 在 Python 中使用 pytz 本地化纪元时间

标签 python datetime timezone epoch pytz

我正在使用 pytz 将纪元时间戳转换为不同时区的日期。我想要做的是创建一个 DateTime 对象,该对象接受 Olson 数据库时区和纪元时间并返回本地化的日期时间对象。最终我需要回答诸如“纽约时间 1350663248 是几点钟?”之类的问题。

这里有些地方不能正常工作:

import datetime, pytz, time

class DateTime:
    def __init__(self, timezone, epoch):
        self.timezone = timezone
        self.epoch = epoch
        timezoneobject = pytz.timezone(timezone)
        datetimeobject = datetime.datetime.fromtimestamp( self.epoch )
        self.datetime = timezoneobject.localize(datetimeobject)

    def hour(self):
        return self.datetime.hour

if __name__=='__main__':
    epoch = time.time()
    dt = DateTime('America/Los_Angeles',epoch)
    print dt.datetime.hour
    dt = DateTime('America/New_York',epoch)
    print dt.datetime.hour

这会打印同一个小时,而一个应该提前 3 个小时左右。这里出了什么问题?我是 Python 的初学者,感谢任何帮助!

最佳答案

datetime.fromtimestamp(self.epoch) 返回不应与任意时区一起使用的本地时间。localize();您需要 utcfromtimestamp() 获取 UTC 日期时间,然后将其转换为所需时区:

from datetime import datetime
import pytz

# get time in UTC
utc_dt = datetime.utcfromtimestamp(posix_timestamp).replace(tzinfo=pytz.utc)

# convert it to tz
tz = pytz.timezone('America/New_York')
dt = utc_dt.astimezone(tz)

# print it
print(dt.strftime('%Y-%m-%d %H:%M:%S %Z%z'))

或者更简单的替代方法是直接从时间戳构造:

from datetime import datetime
import pytz

# get time in tz
tz = pytz.timezone('America/New_York')
dt = datetime.fromtimestamp(posix_timestamp, tz)
# print it
print(dt.strftime('%Y-%m-%d %H:%M:%S %Z%z'))

在这种情况下,它从 UTC 隐式转换。

关于python - 在 Python 中使用 pytz 本地化纪元时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12978391/

相关文章:

php - MySQL + PHP 时区问题

python - 使用 [key :value] combination in Python 将多列合并为一个列列表

python - urllib2.HTTPError : HTTP Error 500: Internal Server Error

php - 比较来自 mysql 的 PHP 中的 2 个日期时间,以便在 android 中查看

javascript - 实现 Moment.js 和 Moment 时区

python - pandas read_csv() 输入本地日期时间字符串,tz_convert to UTC

python - 如何在不使用 numpy 或 zip(或其他导入)的情况下转置矩阵

python - 为什么用try :?捕获异常时不能返回

如果比较两次,例如 : 12:00 and 11:59,Python 日期时间比较不正确

ruby-on-rails - Ruby/Rails - 更改时间的时区,而不更改值