一天是否总是86400个纪元秒?
在回顾我之前的回答时,我发现我提过一些代码,比如这个:
import time
def dates_between(start, end):
# muck around between the 9k+ time representation systems in Python
# now start and end are seconds since epoch
# return [start, start + 86400, start + 86400*2, ...]
return range(start, end + 1, 86400)
当我重新阅读这段代码时,不禁感到一阵不寒而栗,仿佛有个叫Tony the Pony的家伙在我耳边轻声说着“闰秒”,还有其他一些可怕的事情。
那么,“一天有86,400秒”这个假设在什么情况下会出错呢?特别是当我们定义“秒”的时候?(我想像Python的time.mktime
这样的函数应该已经考虑了夏令时的调整,所以上面的代码在夏令时切换的日子也应该能正常工作……我希望如此?)
4 个回答
根据维基百科的说法,
UTC(协调世界时)的一天通常是86400秒,但由于“闰秒”的存在,有时会变成86401秒,甚至可能会是86499秒(不过截至2010年12月,这种情况从未发生过);这样做是为了让一天的长度和地球自转保持一致。
我认为,如果真的使用双闰秒的话,一天可能会变成86402秒。
再编辑一下:我之前有点困惑,因为Python的文档让我感到迷惑。time.mktime
总是返回UTC的时间戳秒数。好了,明白了。: )
一天的秒数取决于你使用的时间系统。例如,在POSIX标准中,一天被定义为正好86400秒:
从纪元(Epoch)开始计算,每一天都应该正好是86400秒。
在协调世界时(UTC)中,可能会有一个闰秒的情况,也就是说,一天可能是86401秒(理论上也可能是86399秒)。截至2015年6月30日,这种情况发生过26次。
如果我们根据太阳的运动来计算一天,那么一天的长度在一年中会有大约16分钟的变化。
这和UT1不同,UT1也是基于地球的自转(平均太阳时间)。一个明显的太阳日可能比平均太阳日短20秒或长30秒。为了保持UTC与UT1之间的差距在0.9秒以内,会偶尔加入闰秒。
如果你根据当地的时钟来定义一天,那么由于奇怪的政治时区变化,这可能会变得非常混乱。假设一天只会因为夏令时(DST)而变化一个小时是不正确的。