我向
Patrick Mackenzie表示歉意。
丹尼(Danny)昨天询问了有关Unix时间的奇怪事实,我回想起有时候它完全不直观。
这三个事实似乎是非常合理和合乎逻辑的,对吗?
- Unix时间是自1970年1月1日UTC 00:00:00以来的秒数。
- 如果您恰好等待一秒钟,那么Unix时间将恰好改变一秒钟。
- Unix时间永远不会退后。
所有这些都不是真的。
但是仅说“所有这一切都是不真实的”而没有解释
原因是不够的。 请参阅下面的说明。 但是,如果您想自己想一想,请不要滚动时钟!
1770年代的座钟。 由John Leroux编译。 来自Wellcome收藏 。 根据CC BY发布所有这三个谬论都有一个原因:
leap秒 。 如果您不熟悉额外的秒数,请参考以下快速参考:
UTC时间由两个因素决定:
- 国际原子时间 :全球数百个原子钟的平均读数。 我们可以通过原子的电磁特性来测量秒,这是科学上已知的最精确的时间测量。
- 世界时间 ,基于地球绕其自身轴的自转。 一整圈-一天。
问题在于这两个数字并不总是重合。 地球自转不一致-它在逐渐变慢,因此世界时的一天越来越长。 另一方面,原子钟的精确度和魔力在数百万年以来都是不可思议的。
当两次不同步时,会在UTC中添加或删除第二次以恢复同步。 自1972年以来,
IERS服务(运行此案例)已增加了27秒。 结果是27天的UTC持续86,401秒。 从理论上讲,一天的持续时间为86 399秒(减一)是可能的。 两种选择都与Unix时间的基本假设背道而驰。
Unix时间假设每天精确地持续86,400秒(60×60×24 = 86,400),而没有任何额外的秒。 如果发生了这种飞跃,则Unix时间要么在一秒后跳跃,要么一秒计数两秒。 截至2019年,它缺少27 leap秒。
因此,我们的错误必须补充如下:
- Unix时间是自1970年1月1日00:00:00 UTC以来的秒数减去leap秒 。
- 如果您恰好等待一秒钟,则如果未删除多余的秒数,则Unix时间将恰好更改为一秒 。
到目前为止,实际上,秒数从未消除过(地球自转速度减慢意味着这不太可能发生),但是,如果发生这种情况,则意味着UTC时间要短一秒。 在这种情况下,UTC的最后一秒(23:59:59)被丢弃。
每个Unix天都有相同的秒数,因此缩短的一天中的最后Unix秒将不对应任何UTC时间。 这是每四分之一秒间隔的样子:

如果您在世界标准时间23:59:58:00开始并等待一秒钟,则Unix时间将提前两秒UTC,并且Unix 101时间戳不会分配给任何人。
- Unix时间永远无法倒退, 除非再增加一秒钟 。
实际上,这已经发生了27次。 在一天结束时,UTC会再添加23:59:60。 Unix天数具有相同的秒数,因此它不能增加额外的一秒-相反,您必须在最后一秒重复Unix时间戳。 这是每四分之一秒间隔的样子:

如果您从23:59:60.50开始并等待半秒钟,则Unix时间返回半秒,而Unix 101时间戳对应于两秒UTC。
这些可能不是Unix时间的唯一怪胎-只是我昨天记得的东西。
时间是一件
很奇怪的事情。