我道歉
昨天
這三個事實看起來非常合理、合乎邏輯不是嗎?
- 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 時代唯一的怪事——只是我昨天記得的。
時間 - 很 奇怪的事情。
來源: www.habr.com