我正在使用datetime.fromtimestamp将纪元时间转换为本地时间。我发现datetime.fromtimestamp在某个时间点做了一个小时的离散跳跃,我完全搞不懂为什么会这样做。
(我还使用time.mktime将日期时间对象转换为epoch time,as suggested by Raymond Hettinger。我不确定这是否是这个问题的相关信息,所以我只是想以防万一。)

Python 2.7.1+ (r271:86832, Apr 11 2011, 18:05:24)
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import time, datetime
>>> def datetime_to_epoch_time(datetime_):
...     return time.mktime(datetime_.timetuple()) + datetime_.microsecond / 1e6
...

选择特定的纪元时间:
>>> x = datetime_to_epoch_time(datetime.datetime(2012, 3, 30, 3, 0))

使用fromtimestamp将其转换为日期时间:
>>> datetime.datetime.fromtimestamp(x)
datetime.datetime(2012, 3, 30, 3, 0)

我们有凌晨3点的时间。
现在,让我们转换正好比它早一秒的时间:
>>> datetime.datetime.fromtimestamp(x-1)
datetime.datetime(2012, 3, 30, 1, 59, 59)

我们突然得到凌晨1:59!
发生什么事了?我知道这样的事情发生在闰日,但从3月30日起,闰日是什么时候?
我应该注意到,我只在Linux上发生过这种情况,而不是在Windows上。我认为不同的Linux计算机(在不同的时区)有不同的时间点,其中fromtimestamp执行跳跃。

最佳答案

容易的。3月30日大概是你时区的夏令时转换。
所以那天的时间确实是从1:59:59到3:00:00

07-28 07:26