datetime模块如何识别本地时区?

时间:2017-08-22 14:32:42

标签: python datetime python-datetime

以下代码显示了一年内每天的当地时间(美国中部时间)和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模块获取此时区信息?

1 个答案:

答案 0 :(得分:0)

查看datetime docs

简而言之,datetime和time对象有一个可选的timezone属性,tzinfo可以设置为abstract tzinfo类的子类的实例。

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

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

相关问题