python time
和datetime
模块在闰秒上返回什么?
当我们在23:59:60. 05 如果我打电话:
-
time.time()
-
datetime.datetime.utcnow()
-
datetime.datetime.now(pytz.utc)
同样,py2.7和py3有什么区别吗?
为什么它令人困惑(至少对我来说):
从datetime文档中我看到:
与time模块不同,datetime模块不支持闰秒。
在时间文档中,我看到在使用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 <module>
ValueError: second must be in 0..59
那么我在那个确切的时间(在闰秒的中间)会得到什么?
我读过橡胶时间,时钟变慢,重复的秒,以及各种疯狂的想法,但是我应该对python期待什么呢?
注意:如果你想知道我是否没有更好的事情要做,关心它,闰秒正在接近!!!!
闰秒有时是手工安排的。目前,计算机时钟没有闰秒的功能;没有标准告诉他们预先插入一个。相反,计算机时钟通过NTP协议周期性地重新同步它们的时间,并在插入闰秒后自动调整。
其次,计算机时钟通常报告从纪元开始的时间为秒。这将取决于datetime
模块在将秒计数转换为包括闰秒时调整其会计。它目前还没有这样做。time.time()
将只报告基于seconds-since-the-epoch的时间计数。
所以,当闰秒正式生效时,没有什么不同的会发生,除了你的计算机时钟会在一段时间内偏离1秒。
datetime
的问题只包括表示的闰秒时间戳,这是它不能做到的。无论如何,它都不会被要求这样做。
Python的mktime
行为在很大程度上继承自C语言,这是由POSIX指定的。规范并不像你想象的那么简单,实际情况甚至更复杂。
我认为这篇文章是对各种问题的一个很好的介绍:
datetime
模块,正如您所观察到的,就像没有闰秒这样的东西一样。