闰秒的 python return 是什么意思
What does python return on the leap second
python time
和 datetime
模块 return 在闰秒上的作用是什么?
当我们在 23:59:60.5 时我会得到什么,如果我调用:
time.time()
datetime.datetime.utcnow()
datetime.datetime.now(pytz.utc)
还有,py2.7和py3有什么区别吗?
为什么令人困惑(至少对我而言):
从datetime docs我看到:
Unlike the time module, the datetime module does not support leap seconds.
在 time docs 上,当使用 strptime
进行解析时,我看到闰秒有 "support"。但是没有关于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()
将仅报告基于自纪元以来的秒数的时间计数。
所以,没有什么不同 当闰秒正式生效时,除此之外,您的计算机时钟将暂时为 1 秒。
datetime
的问题仅涉及 表示 闰秒时间戳,它不能。无论如何都不会要求它这样做。
Python 的 mktime
行为几乎只是继承自 C 的行为,由 POSIX 指定。规格没你想的那么简单,实际情况更复杂。
我觉得这篇文章很好的介绍了各个问题:The Unix leap second mess
datetime
模块,如您所见,就像没有闰秒这样的东西一样。
python time
和 datetime
模块 return 在闰秒上的作用是什么?
当我们在 23:59:60.5 时我会得到什么,如果我调用:
time.time()
datetime.datetime.utcnow()
datetime.datetime.now(pytz.utc)
还有,py2.7和py3有什么区别吗?
为什么令人困惑(至少对我而言):
从datetime docs我看到:
Unlike the time module, the datetime module does not support leap seconds.
在 time docs 上,当使用 strptime
进行解析时,我看到闰秒有 "support"。但是没有关于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()
将仅报告基于自纪元以来的秒数的时间计数。
所以,没有什么不同 当闰秒正式生效时,除此之外,您的计算机时钟将暂时为 1 秒。
datetime
的问题仅涉及 表示 闰秒时间戳,它不能。无论如何都不会要求它这样做。
Python 的 mktime
行为几乎只是继承自 C 的行为,由 POSIX 指定。规格没你想的那么简单,实际情况更复杂。
我觉得这篇文章很好的介绍了各个问题:The Unix leap second mess
datetime
模块,如您所见,就像没有闰秒这样的东西一样。