道歉
昨天
这三个事实看起来非常合理、合乎逻辑不是吗?
- Unix 时间是自 1 年 1970 月 00 日 00:00:XNUMX UTC 以来的秒数。
- 如果您等待一秒,Unix 时间将更改一秒。
- Unix 时间永远不会倒退。
这些都不是真的。
但仅仅说“这些都不是真的”而不做解释是不够的。 为什么。 请参阅下面的解释。 但如果您想自己思考,请不要滚动浏览时钟图片!
1770 年代的座钟。 由约翰·勒鲁编译。 从
这三种误解都有一个原因:
UTC 时间由两个因素决定:
问题是这两个数字并不总是匹配。 地球的自转并不一致 - 它逐渐减慢,因此世界时的白天变得更长。 另一方面,原子钟极其精确并且在数百万年里保持稳定。
当两个时间不同步时,会在 UTC 中添加或删除一秒以使它们恢复同步。 自1972年服役
Unix 时间假设每天正好持续 86 秒 (400 × 60 × 60 = 24),没有任何额外的秒数。 如果发生这样的跳转,那么 Unix 时间要么跳转一秒,要么将两秒计为一秒。 截至 86 年,它缺少 400 个闰秒。
所以我们的误解需要补充如下:
- Unix 时间是自 1 年 1970 月 00 日 00:00:XNUMX UTC 以来的秒数 减去闰秒.
- 如果你等待一秒,Unix 时间就会改变一秒, 除非闰秒已被删除.
到目前为止,秒在实践中从未被消除(地球自转减慢意味着这不太可能),但如果发生这种情况,则意味着 UTC 日将缩短一秒。 在这种情况下,UTC 的最后一秒 (23:59:59) 将被丢弃。
每个 Unix 天都有相同的秒数,因此缩短的一天的最后 Unix 秒将不对应于任何 UTC 时间。 这是它的样子,以四分之一秒为间隔:
如果您从 23:59:58:00 UTC 开始并等待一秒钟,Unix 时间将提前 101 UTC 秒,并且 Unix XNUMX 时间戳不会分配给任何人。 - Unix时间一去不复返, 直到添加闰秒.
这种情况在实践中已经发生了 27 次。 在 UTC 日结束时,会在 23:59:60 添加一秒。 Unix 一天中的秒数相同,因此它不能添加额外的一秒 - 相反,它必须重复最后一秒的 Unix 时间戳。 这是它的样子,以四分之一秒为间隔:
如果您从 23:59:60.50 开始并等待半秒,则 Unix 时间 回来了 半秒,Unix 101 时间戳对应于 UTC 的两秒。
这些可能不是 Unix 时代唯一的怪事——只是我昨天记得的。
时间 - 很 奇怪的事情。
来源: habr.com