.localize和tzinfo之间的Python日期时间差异

时间:2016-09-12 23:35:36

标签: python datetime timezone pytz

为什么这两行产生不同的结果?

>>> import pytz
>>> from datetime ipmort 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

差异的原因是什么,我应该用它来定位日期时间?

1 个答案:

答案 0 :(得分:4)

以这种方式创建d2=datetime(2015, 8, 1, 0, 0, 0, 0, local_tz)时。它无法正确处理夏令时。但是,local_tz.localize()会这样做。

d1是

datetime.datetime(2015, 8, 1, 0, 0, 
                  tzinfo=<DstTzInfo 'America/Los_Angeles' PDT-1 day, 17:00:00 DST>)

d2是

datetime.datetime(2015, 8, 1, 0, 0, 
                  tzinfo=<DstTzInfo 'America/Los_Angeles' PST-1 day, 16:00:00 STD>)

你可以看到他们没有代表同一时间。

d2如果您要使用UTC,那就没关系了。因为UTC没有夏令时转换来处理。

因此,处理时区的正确方法是使用local_tz.localize()