似乎检查它是否是xx:00:00 UTC / GMT就像检查timestamp % 3600 == 0
一样简单,时间戳=自epoch以来经过的秒数(1970-01 -01 00:00:00)。我们可以在这里看到它:
import datetime
print datetime.datetime.fromtimestamp(3600*24*17000)
# 2016-07-18 02:00:00
但这与leap seconds是否相矛盾?实际上,1970-01-01 00:00:00和2016-07-18 02:00:00之间经过的秒数不是3600 的倍数,而是的倍数3600 + 26闰秒(从1972年到现在已经有26个闰秒。)
更准确地说:1970-01-01 00:00:00和2016-07-18 02:00:00之间经过的秒数是3600*24*17000 + 26
而不是{{1} }
答案 0 :(得分: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-06-30午夜之前有一个闰秒)。
因此,Python的日期时间系统并不能完全代表现实世界中存在的所有时间。它模拟了一个没有闰秒的简化世界。
另请参阅:此python issue已关闭,状态为“无法修复”。
链接页面显示mxDatetime
作为datetime.datetime
的替代方案,可以(sort of)处理闰秒。
答案 1 :(得分:0)
我终于找到了here:
当插入闰秒时,大约每年平均发生一次半,Unix时间数在闰秒期间不断增加,在此期间,自当天开始以来,它超过86,400秒< strong>然后在闰秒结束时跳回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
中的某个地方有一些代码可以实现闰秒检测+跳回。有一个“闰秒”here的引用,但我看不出它是如何检测它是否是一个。
import datetime
print datetime.datetime.fromtimestamp(915148799) #1999-01-01 00:59:59
print datetime.datetime.fromtimestamp(915148800) #1999-01-01 01:00:00