python time和datetime模块在闰秒返回什么?
当我们在23:59:60.5时,我会得到什么,如果我打电话:
time.time()datetime.datetime.utcnow()datetime.datetime.now(pytz.utc)另外,py2.7和py3有什么区别吗?
为什么它令人困惑(至少对我来说):
我从日期文档中看到:
与时间模块不同,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.0datetime就这样爆炸了:
>>> 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那么,在那个确切的时间(在闰秒的中间),我会得到什么呢?
我读过关于橡胶时代、时钟慢下来、重复几秒钟以及各种疯狂想法的文章,但是我应该对蟒蛇有什么期望呢?
注意:如果你想知道我是否没有更好的方法去关心它,一个闰秒就要到来了!
发布于 2016-09-25 12:08:58
闰秒有时是手动调度的。目前,计算机时钟还没有达到闰秒的功能;也没有标准可以预先告诉它们插入一个。相反,计算机时钟通过NTP协议周期性地重新同步它们的计时,并在插入了闰秒之后自动调整。
其次,计算机时钟通常将时间报告为自那个时代以来的秒数。在将第二个计数转换为包含闰秒时,应该由datetime模块来调整其记帐。它目前没有这样做。time.time()将只报告一个时间计数,根据秒-自时代.
所以,当闰秒正式生效时,除了你的电脑时钟在一段时间内是1秒之外,没有什么不同的。
datetime的问题只是代表一个闰秒时间戳,但它不能,无论如何也不会被要求这样做。
发布于 2019-02-08 22:01:32
Python的mktime行为在很大程度上是从C继承而来的,C是POSIX指定的。规范并不像您想象的那么简单,现实情况甚至更加复杂。
我认为本文很好地介绍了各种问题:Unix闰秒混乱
正如您所观察到的,datetime模块的行为就像没有闰秒一样。
https://stackoverflow.com/questions/39686553
复制相似问题