datetime 模块如何知道本地时区?

How is the datetime module aware of the local time zone?

以下代码显示了我的本地时间(美国中部时间)和一年多来每一天的 UTC 之间的时差:

import datetime
startTs = 1293808443
intvl = 24 * 3600
for day in range(365):
    ts = startTs + day * intvl
    localTs = datetime.datetime.fromtimestamp(ts)
    utcTs = datetime.datetime.utcfromtimestamp(ts)
    print("%s\t%s" % (utcTs.strftime("%Y-%m-%d %H:%M:%S"), (utcTs - localTs)))

结果:

2010-12-31 15:14:03 6:00:00
2011-01-01 15:14:03 6:00:00
...
2011-03-11 15:14:03 6:00:00
2011-03-12 15:14:03 6:00:00
2011-03-13 15:14:03 5:00:00
2011-03-14 15:14:03 5:00:00
...
2011-11-04 15:14:03 5:00:00
2011-11-05 15:14:03 5:00:00
2011-11-06 15:14:03 6:00:00
2011-11-07 15:14:03 6:00:00
...
2011-12-29 15:14:03 6:00:00
2011-12-30 15:14:03 6:00:00

在我不指定任何时区信息的情况下,日期时间模块似乎不仅知道本地时区与 UTC 之间的时差,而且还知道夏令时的开始和结束时间。这似乎与类似问题的 this answer 相矛盾。我的结论有误吗?如果没有,我如何从 OS/datetime 模块获取时区信息?

查看 datetime docs

简而言之,datetime 和 time 对象有一个可选的时区属性 tzinfo,它可以设置为抽象 tzinfo class.

的子class 实例。

这些 tzinfo 对象捕获有关与 UTC 时间的偏移量、时区名称以及夏令时是否有效的信息, 只有一个具体的 tzinfo class,时区 class,由 datetime 模块提供。

时区 class 可以表示与 UTC 具有固定偏移量的简单时区,例如 UTC 本身或北美 EST 和 EDT 时区。