2

似乎检查它是否是 xx:00:00 UTC/GMT 就像检查 if 一样简单 timestamp % 3600 == 0,时间戳 = 自纪元(1970-01-01 00:00:00) 以来经过的秒数。我们可以在这里看到:

import datetime 
print datetime.datetime.fromtimestamp(3600*24*17000)
# 2016-07-18 02:00:00

但这不是与闰秒矛盾吗?实际上,从 1970-01-01 00:00:00 到 2016-07-18 02:00:00 之间经过的秒数不是 3600 的倍数,而是3600 + 26 闰秒的倍数(有 26 1972 年到现在之间的闰秒)。


更准确地说:1970-01-01 00:00:00 和 2016-07-18 02:00:00 之间经过的秒数 is3600*24*17000 + 26 和 not3600*24*17000

4

2 回答 2

0

Python 的datetime.datetime对象无法处理闰秒,因为seconds属性限制在 0..59 范围内:

In [19]: DT.datetime(2012, 6, 30, 23, 59, 60)
ValueError: second must be in 0..59

(2012 年 6 月 30 日午夜之前有一个闰秒)。

因此,Python 的日期时间系统并不能完全代表现实世界中存在的所有时间。它模拟了一个不存在闰秒的简化世界。

另请参阅:这个以“无法修复”状态关闭的python 问题。

链接页面显示mxDatetimedatetime.datetime可以(某种)处理闰秒的替代方案。

于 2018-01-18T18:58:11.050 回答
0

我终于在这里找到了:

当插入闰秒时,平均大约每年半年发生一次,在闰秒期间Unix时间数不断增加,在此期间距当天开始超过86,400秒,然后跳回在闰秒结束时减 1,即第二天的开始

1998-12-31T23:59:59.75  915 148 799.75
1998-12-31T23:59:60.00  915 148 800.00  # leap second here
1998-12-31T23:59:60.25  915 148 800.25
1998-12-31T23:59:60.50  915 148 800.50
1998-12-31T23:59:60.75  915 148 800.75
1999-01-01T00:00:00.00  915 148 800.00  # timestamp jumps back!
1999-01-01T00:00:00.25  915 148 800.25

所以可能在某处有一些代码可以进行datetime.py闰秒检测+跳回。这里提到了“闰秒” 但我看不出它如何检测它是否是一个。

import datetime 
print datetime.datetime.fromtimestamp(915148799) #1999-01-01 00:59:59
print datetime.datetime.fromtimestamp(915148800) #1999-01-01 01:00:00
于 2018-01-18T19:12:28.310 回答