關於曆法的一系列知識整編 - P5
摘抄、整編,已盡力羅列來源。
授時
授時的基本含義就是通過標準或者定製的介面和協議,為其他裝置或系統提供 時間 資訊。其基本渠道是短波、 電視 訊號、 電纜 、 網路 等等。 授時 精度從 納秒 級(ns)到 毫秒 級(ms)不等,主要由 原子鐘 、 衛星 系統、網路、高穩定度 振盪器 等作為時間源。
現在,中國大陸的官方標準授時由位於陝西的 國家授時中心 負責。
國際地球自轉和參考系服務
在國際上, 國際地球自轉和參考系服務 (International Earth Rotation and Reference System, IERS)負責提供一個全球化的參考系統,目的或者說目標是為天文學,測地學等研究團體使用,以此為基礎建立觀測資料庫。
由於地球自轉的觀測結果影響到授時系統的自我糾察,所以該機構的資料庫具有重要意義。
國際地球自轉服務(International Earth Rotation Service,IERS)由國際大地測量學和地球物理學聯合會及與國際天文學聯合會聯合創辦,用以取代國際時間局(BIH)的地球自轉部分和原有的國際極移服務(IPMS)。
國際天文學聯合會
國際天文學聯合會 (International Astronomical Union, IAU)是世界各國天文學術團體聯合組成的非政府性學術組織,其宗旨是組織國際學術交流,推動國際協作,促進天文學的發展。國際天文學聯合會於1919年7月在布魯塞爾成立。 天文學聯盟有73個成員國,其中包括專業天文學研究達到較高程度的大多數國家。天文學聯盟的一個主要從事地面和空間天文學各學科的10528 多名成員的直接參與。
閏秒
在現行授時系統中,地球自轉並非精確的 24 小時,這導致每過數年,天文觀測所確定的時間與原子鐘之間的偏差會大到超過 0.9 秒。此時就需要閏秒,將這多出來的一秒鐘加入到國際日期和日曆表中。
此前最近的一次閏秒,是 2016-12-31 23:59:60,即跨新年的一夜,23:59:59 之後不是 2017 年而是 23:59:60。
你需要注意到一個事實是,現行的絕大多數 App,H5 頁面,小程式之類,均無法正確處理 60 秒這一時刻。這是因為它們在解釋或者篩選日期時間的字串片段時,針對秒數可能採用了 00-59 的範圍,而不是 00-60 的範圍。
但是基礎系統,我是指作業系統、資料庫等等植根於 tzdb/zoneinfo 的基礎上的後端應用,則通常不會有這一問題。因為在 tzdb 中包含了歷史以來的所有閏秒時刻。所以只要你保持系統更新,那麼現代日期系統能夠精確無誤地處理 1970 年以來的時間點。
之所以是 1970 年開始,源於兩個原因:
- 1970 年通過的國際決議開始向 UTC 系統中加入閏秒,從而使得 UTC 時間系統保證了其精確性和穩定性。
- 目前的所有主流作業系統均採用 Unix 時間戳記來做時間點的二進位制表示。而 Unix 時間戳依據原因 1 並做了簡化,形成了這樣的基本版:一個 Unix 時間戳是一個有符號整數,代表從 1970-01-01 00:00:00 以來流經的秒數(或者負數代表反向)。
簡化:
實際上 1970 年 國際無線電諮詢委員會 (CCIR)通過的 460 號建議案決議決定加入跳秒(即閏秒),這一決議自 1972-01-01 00:00:00 起執行。因此,Unix 時間實際上並不是以其為基準開始計時的。
歷史上,Unix 時間遠點被重定義過多次,最初使用 1971-01-01,每秒的數值增量為 60 (即以 60Hz 增加),這導致 32 位整數 在大約 2.5年後就會用盡。因而後來原點被重置過多次,重新定義過多次,直到最後採用的現行標準:1970-01-01 00:00:00 並以 1Hz 計時(即按秒數計時)。
在進入 21 世紀以來,由於 Unix 時間的 2038 年用盡問題,加上 64 位作業系統漸成主流,其定義也被擴充套件為使用 64 位有符號整數而不是 32 位的,從而避開了 2038 年 32 位整數被用盡的問題。
這當然治標不治本!
然而考慮到 64 位 Unix 時間直到 2922億7702萬6596年12月4日15時30分08秒 才會用盡,我就也不必說什麼了。
那時候,我已經迴歸星漢燦爛了。我今天所寫的每一個字,每一標點,每一思緒,盡皆湮沒在時間長河中了,犯不著再提任何意見了。
授時服務
在真實世界,授時服務是國際化合作的,基於原子鐘、天文觀測與校準,會產生一個權威性的時鐘,全球的各大權威天文臺又同步該時鐘源,並由各國的權威授時機構面向國內進行時鐘釋出。釋出行為是多渠道的,廣播、媒體、電網、其它國內基礎網路,網際網路等等。
在網際網路中,授時服務被稱作 NTP,由全球以及各國的授時機構進行服務,採用專有的 NTP 協議進行通訊,從而完成本地計算機到授時伺服器的訪問和時間同步。
NTP 協議的關鍵之處在於通過一種理論進行通訊時延的計算和消除,從而使得客戶端能夠在校時後與源伺服器的時鐘完全相同(誤差許可內)。
REFs
- 關於曆法的一系列知識整編 - P6
- 關於曆法的一系列知識整編 - P5
- gochecknoinits - init() 是不是真的很要不得
- 在 Go 中實現更好的埋點日誌功能
- Linux 命令 man 全知全會
- Linux 命令 less 全知全會
- 從零開始製作 deb 檔案
- 從 Golang 正則式講起
- 淺談如何實現自定義的 iterator
- 談 C 17 裡的設計模式們之收尾篇
- 實作中的 std::is_detected 和 Detection Idioms (C 17)
- 談 C 17 裡的 Chain of Responsibility 模式
- 理解 declval 和 decltype
- 談 C 17 裡的 Command 模式
- 談 C 17 裡的 Strategy 模式
- 談 C 17 裡的 Builder 模式
- 拜了,Big Sur!
- C 中的 Pipeable 程式設計
- Armitage 無法啟動問題
- Golang 程式碼編寫中的技巧