Python .localize 和 tzinfo 之间的日期时间差异
Python datetime difference between .localize and tzinfo
为什么这两行会产生不同的结果?
>>> import pytz
>>> from datetime import datetime
>>> local_tz = pytz.timezone("America/Los_Angeles")
>>> d1 = local_tz.localize(datetime(2015, 8, 1, 0, 0, 0, 0)) # line 1
>>> d2 = datetime(2015, 8, 1, 0, 0, 0, 0, local_tz) # line 2
>>> d1 == d2
False
造成差异的原因是什么,我应该使用哪个来本地化日期时间?
当您创建 d2 = datetime(2015, 8, 1, 0, 0, 0, 0, local_tz)
时,它无法正确处理夏令时 (DST)。 local_tz.localize()
确实如此。
d1
是
>>> local_tz.localize(datetime(2015, 8, 1, 0, 0, 0, 0))
datetime.datetime(
2015, 8, 1, 0, 0,
tzinfo=<DstTzInfo 'America/Los_Angeles' PDT-1 day, 17:00:00 DST>
)
d2
是
>>> datetime(2015, 8, 1, 0, 0, 0, 0, local_tz)
datetime.datetime(
2015, 8, 1, 0, 0,
tzinfo=<DstTzInfo 'America/Los_Angeles' LMT-1 day, 16:07:00 STD>
)
可以看出他们代表的不是同一时间
如果您要使用 UTC,d2
方式很好。 UTC 没有要处理的夏令时 (DST) 转换。
正确处理时区的方法是使用local_tz.localize()
支持夏令时(DST)
可以在此处找到更多信息和其他示例:
http://pytz.sourceforge.net/#localized-times-and-date-arithmetic
为什么这两行会产生不同的结果?
>>> import pytz
>>> from datetime import datetime
>>> local_tz = pytz.timezone("America/Los_Angeles")
>>> d1 = local_tz.localize(datetime(2015, 8, 1, 0, 0, 0, 0)) # line 1
>>> d2 = datetime(2015, 8, 1, 0, 0, 0, 0, local_tz) # line 2
>>> d1 == d2
False
造成差异的原因是什么,我应该使用哪个来本地化日期时间?
当您创建 d2 = datetime(2015, 8, 1, 0, 0, 0, 0, local_tz)
时,它无法正确处理夏令时 (DST)。 local_tz.localize()
确实如此。
d1
是
>>> local_tz.localize(datetime(2015, 8, 1, 0, 0, 0, 0))
datetime.datetime(
2015, 8, 1, 0, 0,
tzinfo=<DstTzInfo 'America/Los_Angeles' PDT-1 day, 17:00:00 DST>
)
d2
是
>>> datetime(2015, 8, 1, 0, 0, 0, 0, local_tz)
datetime.datetime(
2015, 8, 1, 0, 0,
tzinfo=<DstTzInfo 'America/Los_Angeles' LMT-1 day, 16:07:00 STD>
)
可以看出他们代表的不是同一时间
如果您要使用 UTC,d2
方式很好。 UTC 没有要处理的夏令时 (DST) 转换。
正确处理时区的方法是使用local_tz.localize()
支持夏令时(DST)
可以在此处找到更多信息和其他示例:
http://pytz.sourceforge.net/#localized-times-and-date-arithmetic