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

Nic*_*ick 5 python timezone datetime 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
Run Code Online (Sandbox Code Playgroud)

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

lev*_*evi 5

当您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>)
Run Code Online (Sandbox Code Playgroud)

d2是

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

您可以看到它们不在同一时间。

d2如果您要使用UTC,那就很好了。因为UTC没有夏令时转换。

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