【发布时间】:2016-09-25 11:59:26
【问题描述】:
pythontime 和 datetime 模块在闰秒返回什么?
如果我打电话,当我们在 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 <module>
ValueError: second must be in 0..59
那么在那个确切的时间(闰秒的中间)我会得到什么?
我读过关于橡胶时间、时钟减慢、重复秒数以及各种疯狂的想法,但我应该对 python 有什么期望?
注意:如果你想知道我是否没有更好的事情来关心它,闰秒即将到来!!!!
【问题讨论】:
-
我预计不会发生任何事情。您的计算机时钟不会遵守闰秒;它将一直持续到下一次 ntp 时钟同步,之后您的计算机时钟将再次正确。
-
如果你想要一个支持闰秒的日期时间,试试 astropy.time
-
@MarioCorchero:是的,会提前 1 秒。
-
@MartijnPieters:那个级别的精度是一秒,python有什么问题?我可以同意不使用计算机时钟,但我没有看到 python 的问题。
-
@MarioCorchero:Python 不是实时编程语言。当计时精度如此重要以至于闰秒会产生影响时,请勿使用它。即使是您一般使用的操作系统(Windows、OS X、Linux 等)也无法做出这样的保证。这就是 Real Time OS 的用途。
标签: python datetime time leap-second