为什么时区感知日期时间的 tzinfo 不等于时区?

wim*_*wim 4 python timezone datetime pytz

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

这些不同的原因是什么?

>>> dt_aware.tzinfo
<DstTzInfo 'America/Chicago' CDT-1 day, 19:00:00 DST>
>>> tz
<DstTzInfo 'America/Chicago' LMT-1 day, 18:09:00 STD>
Run Code Online (Sandbox Code Playgroud)

Mat*_*int 5

第一个已调整为提供的日期和时间,2016-06-06T00:00:00。中部夏令时间 (CDT) 此时生效。比 UTC 晚 5 小时 ( 24:00 - 05:00 = 19:00)。

第二个尚未本地化,因此它为您提供可用时区数据中的第一个偏移量,这恰好是本地平均时间 (LMT)条目。 您可以在此处的 tzdata 源中看到这一点。LMT 比 UTC 晚 5 小时 50 分 36 秒。LMT 偏移量的秒数在 pytz 中的某处四舍五入,因此18:09正确反映了这一点 ( 24:00 - 05:51 = 18:09)