>>> import pytz
>>> tz = pytz.timezone('America/Chicago')
>>> dt_naive = datetime(year=2017, month=6, day=6)
>>> dt_aware = tz.localize(dt_naive)
>>> dt_aware.tzinfo == tz
False
这些差异的原因是什么?
>>> dt_aware.tzinfo
<DstTzInfo 'America/Chicago' CDT-1 day, 19:00:00 DST>
>>> tz
<DstTzInfo 'America/Chicago' LMT-1 day, 18:09:00 STD>
答案 0 :(得分:4)
第一个已根据提供的日期和时间进行调整,2016-06-06T00:00:00
。中央夏令时(CDT)此时生效。它比UTC(24:00 - 05:00 = 19:00
)落后5小时。
第二个尚未本地化,因此它为您提供可用时区数据中的第一个偏移量,恰好是Local Mean Time (LMT)条目。 You can see this in the tzdata sources here。 LMT比UTC落后5小时50分钟36秒。 LMT偏移的秒数在pytz中的某处舍入,因此18:09
正确地反映了这一点(24:00 - 05:51 = 18:09
)
答案 1 :(得分:3)
从pytz
确定时区的键是您为创建对象而传递的字符串:'America/Chicago'
。该密钥可通过.zone
属性获得。
>>> tz = pytz.timezone('America/Chicago')
>>> dt_naive = datetime(year=2017, month=6, day=6)
>>> dt_aware = tz.localize(dt_naive)
>>> dt_aware.tzinfo == tz
False
>>> tz.zone
'America/Chicago'
>>> dt_aware.tzinfo.zone == tz.zone
True