以下代码显示了一年内每天的当地时间(美国中部时间)和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模块获取此时区信息?
答案 0 :(得分:0)
简而言之,datetime和time对象有一个可选的timezone属性,tzinfo可以设置为abstract tzinfo类的子类的实例。
这些tzinfo对象捕获有关UTC时间偏移量,时区名称以及夏令时是否生效的信息, 时区类只有一个具体的tzinfo类由datetime模块提供。
时区类可以表示与UTC固定偏移的简单时区,例如UTC本身或北美EST和EDT时区。