datetime with pytz timezone. Different offset depending on how tzinfo is set
我今天遇到了一个有趣的情况。 谁能解释为什么ts1和ts2的偏移量不同? ts1是一个日期时间对象,可立即识别时区。 ts2是一个日期时间对象,它从时区开始并且替换了tzinfo。 然而,他们最终得到不同的抵消。
1 2 3 4 5 6 7 8 9 | >>> from pytz import timezone >>> EST = timezone('America/New_York') >>> ts1 = datetime.datetime.now(tz=EST) >>> ts2 = datetime.datetime.now() >>> ts2 = ts2.replace(tzinfo=EST) >>> print ts1 2014-05-16 11:25:16.749748-04:00 >>> print ts2 2014-05-16 11:25:19.581710-05:00 |
当你调用
1 2 3 4 | >>> ts1 datetime.datetime(2014, 5, 16, 11, 51, 7, 916090, tzinfo=<DstTzInfo 'America/New_York' EDT-1 day, 20:00:00 DST>) >>> ts2 datetime.datetime(2014, 5, 16, 11, 51, 30, 922692, tzinfo=<DstTzInfo 'America/New_York' LMT-1 day, 19:04:00 STD>) |
你最终得到LMT而不是EDT。
Unfortunately using the tzinfo argument of the standard datetime
constructors ''does not work'' with pytz for many timezones.
>>> datetime(2002, 10, 27, 12, 0, 0, tzinfo=amsterdam).strftime(fmt) '2002-10-27 12:00:00 LMT+0020' It is safe for timezones without daylight saving transitions though,
such as UTC:
>>> datetime(2002, 10, 27, 12, 0, 0, tzinfo=pytz.utc).strftime(fmt) '2002-10-27 12:00:00 UTC+0000'
我不确定为什么第一个有效;也许是因为当最初使用
编辑:
啊,Python文档指出使用
1 | EST.fromutc(datetime.utcnow().replace(tzinfo=EST)) |
这意味着您要从UTC转换,这对
根据文档,将时区应用于天真日期时间的正确方法是使用
1 | ts1 = eastern.localize(datetime.datetime.now()) |
此外,我建议您使用avoid