python在闰秒上返回什么

时间:2016-09-25 11:59:27

标签: python datetime time leap-second

python timedatetime模块在​​闰秒上返回什么?

如果我致电 23:59:60.5 ,我会得到什么:

  • time.time()
  • datetime.datetime.utcnow()
  • datetime.datetime.now(pytz.utc)

另外,py2.7和py3之间有什么区别?

为什么它令人困惑(至少对我来说):

datetime docs我看到:

  

与时间模块不同,日期时间模块不支持闰秒。

time docs我看到有"支持"使用strptime进行解析时的闰秒。但是没有关于time.time()的评论。

我看到使用time我得到了:

>>> time.mktime(time.strptime('2016-06-30T23:59:59', "%Y-%m-%dT%H:%M:%S"))
1467327599.0
>>> time.mktime(time.strptime('2016-06-30T23:59:60', "%Y-%m-%dT%H:%M:%S"))
1467327600.0
>>> time.mktime(time.strptime('2016-07-01T00:00:00', "%Y-%m-%dT%H:%M:%S"))
1467327600.0

datetime爆炸了:

>>> dt.datetime.strptime('2016-06-30T23:59:60', "%Y-%m-%dT%H:%M:%S")
Traceback (most recent call last):
  File "<stdin>", line 1, in &lt;module>
ValueError: second must be in 0..59

然后我会在那个确切的时间(在闰秒中间)得到什么?

我已经阅读过关于橡胶时代,时钟放慢速度,重复秒数以及各种疯狂想法的内容,但是我应该对python有什么期望呢?

注意:如果你想知道我是否有更好的事情可以做到这一点,那么闰秒即将来临!!!!

2 个答案:

答案 0 :(得分:6)

闰秒偶尔手动预定。目前,计算机时钟无法承受闰秒;没有标准告诉他们预先插入一个。相反,计算机时钟通过NTP协议定期重新同步其时间,并在插入闰秒后自动调整。

接下来,计算机时钟通常会将时间报告为自纪元以来的。在转换第二个计数以包含闰秒时,它将由datetime模块调整其会计。目前它没有做到这一点。 time.time()只会根据自此纪元以来的秒数报告时间计数。

因此,当闰秒正式生效时,将不会发生任何不同的,除此之外,您的计算机时钟将持续1秒钟。

datetime的问题仅涵盖代表闰秒时间戳,但它无法解决。无论如何,它都不会被要求这样做。

答案 1 :(得分:0)

Python的mktime行为几乎是从POSIX指定的C继承而来的。规范并不像您想象的那么简单,实际情况甚至更加复杂。

我认为这篇文章很好地介绍了各种问题:http://www.madore.org/~david/computers/unix-leap-seconds.html

您所观察到的datetime模块的作用就像没有like秒之类的东西。