为什么我在一个具有几乎相同的日期时间结构的文件中得到不同的结果时区?
print(datetime.datetime.now(pytz.timezone('Europe/Moscow')))
>>> 2020-05-31 12:55:04.778210+03:00
print(datetime.datetime(2020, 5, 31, 12, 54, 0, 0, pytz.timezone('Europe/Moscow')))
>>> 2020-05-31 12:54:00+02:30
为什么我在一个具有几乎相同的日期时间结构的文件中得到不同的结果时区?
print(datetime.datetime.now(pytz.timezone('Europe/Moscow')))
>>> 2020-05-31 12:55:04.778210+03:00
print(datetime.datetime(2020, 5, 31, 12, 54, 0, 0, pytz.timezone('Europe/Moscow')))
>>> 2020-05-31 12:54:00+02:30
1条答案
按热度按时间2vuwiymt1#
问题在于
pytz
使用的时区模型与解释该问题的Python标准lib.Here's a blog post by Paul Ganssle不同。对
pytz
执行此操作的正确方法是使用其timezone
类的localize
方法:虽然
datetime.datetime.now(pytz.timezone('Europe/Moscow'))
正确创建了具有已定义时区的datetime
对象,但datetime.datetime(2020, 5, 31, 12, 54, 0, 0, pytz.timezone('Europe/Moscow'))
首先创建了一个简单的datetime
对象,然后创建了时区replace
。使用pytz
时应避免使用replace
,而应改用localize
。pytz
的另一个替代方法是dateutil
,由于dateutil
使用标准lib的时区模型,因此上面的操作更加直接: