为什么没有pytz localize()生成一个日期时间对象,其tzinfo匹配本地化的tz对象?

时间:2014-06-23 06:20:29

标签: python datetime timezone pytz tzinfo

有没有人可以帮助我了解这里发生了什么?

import pytz
from datetime import datetime
tz = pytz.timezone('Europe/Berlin')
print repr(tz)
# <DstTzInfo 'Europe/Berlin' LMT+0:53:00 STD>
dt = datetime(2011, 1, 3, 18, 40)
result = tz.localize(dt)
print repr(result.tzinfo)
# <DstTzInfo 'Europe/Berlin' CET+1:00:00 STD>
assert result.tzinfo == tz, "Why aren't these the same timezone?"

我的理解是,pytz时区对象上的localize()方法将采用天真的日期时间对象,并添加与执行本地化的时区对象匹配的tzinfo属性。在这种情况下似乎没有发生这种情况。

显然,我对时区或者pytz处理时区的方式有些误解。谁能解释一下?

1 个答案:

答案 0 :(得分:10)

他们 的时区相同 - "Europe/Berlin"

当您打印它们时,输出包括在该特定时间点应用的缩写和偏移。

如果您检查the tz data sources,您会看到:

# Zone  NAME            GMTOFF   RULES       FORMAT   [UNTIL]
Zone    Europe/Berlin   0:53:28  -           LMT      1893 Apr
                        1:00     C-Eur       CE%sT    1945 May 24 2:00
                        1:00     SovietZone  CE%sT    1946
                        1:00     Germany     CE%sT    1980
                        1:00     EU          CE%sT

因此,如果时区没有本地化日期时间,那么它只会使用第一个条目。

似乎pytz不会保留原始本地平均时间偏差的额外28秒 - 但除非您在1893年4月之前在柏林处理日期,否则无关紧要。