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 时区。
以下代码显示了我的本地时间(美国中部时间)和一年多来每一天的 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 时区。