12

pythontimedatetime模块在闰秒返回什么?

如果我打电话给我们,当我们在23:59:60.5时,我会得到什么:

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

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


为什么它令人困惑(至少对我而言):

从我看到的日期时间文档中:

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

时间文档中,我看到使用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 有什么期望?

注意:如果你想知道我是否没有什么更好的事情来关心它,闰秒即将到来!!!!

4

2 回答 2

11

闰秒有时是手动安排的。目前,计算机时钟没有支持闰秒的功能;没有标准告诉他们预先插入一个。相反,计算机时钟通过 NTP 协议定期重新同步它们的时间,并在插入闰秒后自动调整。

接下来,计算机时钟通常将时间报告为自纪元以来的秒数。在将秒计数转换为包括闰秒时,由datetime模块调整其记帐。它目前不这样做。time.time()将仅报告基于自时代以来的秒数的时间计数。

因此,当闰秒正式生效时,不会发生任何不同的情况,只是您的计算机时钟会在一段时间内变为 1 秒。

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

于 2016-09-25T12:08:58.230 回答
2

Pythonmktime在这里的行为几乎只是继承自 POSIX 指定的 C 语言。规范并不像您想象的那么简单,而实际情况则更加复杂。

我认为这篇文章很好地介绍了各种问题:Unix 闰秒混乱

正如您所观察到的,该datetime模块就像没有闰秒这样的东西。

于 2019-02-08T22:01:32.343 回答