深入理解GMT,UTC和Unix時間戳

前言

隨時全球化的發展,國內的企業已經開始越來越多地與國際接軌,超出國門而向全球用戶。由於大家都知道原因:地球是圓的,所以針對不是國家的地區所使用的時間表示問題,成爲全球化中的一個重要問題,就此本文對三個重要的時間概念:GMT、UTC和Unix時間戳進行詳細說明。

準備工作

在開始文章之前,我們首先討論一個最基本的問題,如何決定“一天的開始”?相信所有人都理“一天”表示的是地球自轉一週的用時,即便在古代,人們不知道地球是圓的,根據太陽的運行軌跡,也知道太陽轉一圈就是一天。但是現在的問題是,什麼是一天的開始,即這一時刻如何界定?這個看似簡單的問題,實際上在歷史上不同的國家有不同的處理方式,經過多年的摸索,最終決定時間的方式是用正午來決定,即利用中午太陽光的影子與指定線重疊的時刻爲12點,因爲這樣最容易確定且誤差最小。這種計時方式因爲利用的是太陽定位,所以稱之爲太陽日。相對的還有有地球日,即地球上指定經線自動一週後重疊所用的時間。一個太陽日比地球日少約4分鐘,換言之每年地球會有365(閏年366)個太陽日,而會有366(閏年367)個地球日。具體原因不在本文討論範圍內,有興趣的可以自行研究。因此,只要正午12點定了,那麼根據每天24小時,早晚的時間也都可以確定了。有了這個基礎,下面我們再看這三個概念。

格林威治標準時間 GMT

根據維基百科,格林威治標準時間(Greenwich Mean Time)是倫敦格林威治皇家天文臺計算的平均太陽時間,但是由於在過去的不同時期,它的計算方法有所不同,包括從中午開始計算; 因此,除非給出上下文,否則它不能用於指定準確的時間。英國經常將GMT用作協調世界時(UTC)的同義詞。對於導航,它被認爲等效於UT1(即現代的平均經度爲0°的太陽時間); 但是此含義與UTC的差異最多可以達到0.9 秒。因此,術語GMT不應用於某些需要精確度的技術目的。

簡單地說,GMT由於計算精度、歷史算法等問題,有一定的確定性和不準確性,在精度高的場合不合適,所以現在逐漸被UTC取代,比如在Java中,默認的時間就是UTC。

協調世界時間 UTC

協調世界時(Coordinated Universal Time)是世界各地用來調節時鐘和時間的主要時間標準,定義爲:位於0度經度的平均太陽時間,是格林威治標準時間(GMT)的後繼者。所以UTC也是太陽日計日方法。自1960年1月1日開始在世界範圍內進行時間和頻率傳輸的協調,並於1963年首次被正式採納爲CCIR 374建議書“標準頻率和時間信號發射”。

冷知識:根據英文語法其縮寫應該爲CUT纔對,但是在法國其寫法爲:Temps Universel Coordonné,縮寫爲TUC,因此雙方經過多次協商,直到1967年才達成統一爲意見UTC爲雙方所接受。

Unix 時間戳(Unix Time Stamp)

Unix時間戳是一種跟蹤時間(以秒爲單位)的方式。 此計數從1970年1月1日UTC的Unix Epoch開始。 因此,unix時間戳僅僅是特定日期與Unix紀元之間的秒數。 所以,這個時間是不考慮任何的計算方式的,非常簡單有效的,只表示當前時間與開始時間的秒差,這樣無論任何作用者,無論身在何處,作用何種計時方式,該時間點在技術上都是一樣的。對於當地使用者,只需要進行一次轉換即可變爲當前時間。這種計時對於計算機系統在在線和客戶端動態和分佈式應用程序中跟蹤和排序日期信息非常有用。所以被廣泛使用在Unix操作系統中(後來的Linux,Windows等系統也都支持此計時方式)。

小結

本文簡單簡介了三種時間表示方式。基於準確可靠的原則,推薦使用UTC表示全球時間,在計算機中計時時,使用Unix Time Stamp,從而在全球範圍內實現準確可靠一致的時間表示。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章