徹底弄懂GMT、UTC、時區和夏令時
前言
格林威治時間、世界時、祖魯時間、GMT、UTC、跨時區、夏令時,這些眼花繚亂的時間術語,我們可能都不陌生,但是真正遇到問題,可能又不那麼確定,不得不再去查一查,處理完可能過段時間又忘記。今天,我們徹底來梳理一下它們。
一、GMT
什麼是GMT
GMT(Greenwich Mean Time), 格林威治平時(也稱格林威治時間)。
它規定太陽每天經過位於英國倫敦郊區的皇家格林威治天文臺的時間為中午12點。
GMT的歷史
格林威治皇家天文臺為了海上霸權的擴張計劃,在十七世紀就開始進行天體觀測。為了天文觀測,選擇了穿過英國倫敦格林威治天文臺子午儀中心的一條經線作為零度參考線,這條線,簡稱格林威治子午線。
1884年10月在美國華盛頓召開了一個國際子午線會議,該會議將格林威治子午線設定為本初子午線,並將格林威治平時 (GMT, Greenwich Mean Time) 作為世界時間標準(UT, Universal Time)。由此也確定了全球24小時自然時區的劃分,所有時區都以和 GMT 之間的偏移量做為參考。
1972年之前,格林威治時間(GMT)一直是世界時間的標準。1972年之後,GMT 不再是一個時間標準了。
二、UTC
什麼是UTC
UTC(Coodinated Universal Time),協調世界時,又稱世界統一時間、世界標準時間、國際協調時間。由於英文(CUT)和法文(TUC)的縮寫不同,作為妥協,簡稱UTC。
UTC 是現在全球通用的時間標準,全球各地都同意將各自的時間進行同步協調。UTC 時間是經過平均太陽時(以格林威治時間GMT為準)、地軸運動修正後的新時標以及以秒為單位的國際原子時所綜合精算而成。
在軍事中,協調世界時會使用“Z”來表示。又由於Z在無線電聯絡中使用“Zulu”作代稱,協調世界時也會被稱為"Zulu time"。
UTC 由兩部分構成:
-
原子時間(TAI, International Atomic Time):
結合了全球400個所有的原子鐘而得到的時間,它決定了我們每個人的鐘表中,時間流動的速度。 -
世界時間(UT, Universal Time):
也稱天文時間,或太陽時,他的依據是地球的自轉,我們用它來確定多少原子時,對應於一個地球日的時間長度。
UTC的歷史
1960年,國際無線電諮詢委員會規範統一了 UTC 的概念,並在次年投入實際使用。
“Coordinated Universal Time”這個名字則在1967年才被正式採納。
1967年以前, UTC被數次調整過,原因是要使用閏秒(leap second)來將 UTC 與地球自轉時間進行統一。
三、GMT vs UTC
GMT是前世界標準時,UTC是現世界標準時。
UTC 比 GMT更精準,以原子時計時,適應現代社會的精確計時。
但在不需要精確到秒的情況下,二者可以視為等同。
每年格林尼治天文臺會發調時資訊,基於UTC。
四、時區
隨著火車鐵路與其他交通和通訊工具的發展,以及全球化貿易的推動,各地使用各自的當地太陽時間帶來了時間不統一的問題,在19世紀催生了統一時間標準的需求,時區由此誕生。
時區是如何定義的
從格林威治本初子午線起,經度每向東或者向西間隔15°,就劃分一個時區,在這個區域內,大家使用同樣的標準時間。
但實際上,為了照顧到行政上的方便,常將1個國家或1個省份劃在一起。所以時區並不嚴格按南北直線來劃分,而是按自然條件來劃分。另外:由於目前,國際上並沒有一個批准各國更改時區的機構。一些國家會由於特定原因改變自己的時區。
全球共分為24個標準時區,相鄰時區的時間相差一個小時。
在不同地區,同一個時區往往會有很多個不同的時區名稱,因為名稱中通常會包含該國該地區的地理資訊。在夏令時期間,當地的時區名稱及字母縮寫會有所變化(通常會包含“daylight”或“summer”字樣)。
例如美國東部標準時間叫:EST,Estern Standard Time;而東部夏令時間叫:EDT,Estern Daylight Time。
想檢視世界所有時區的名字可以訪問這個網站:
https://www.timeanddate.com/time/zones/
四、夏令時
什麼是夏令時
DST(Daylight Saving Time),夏令時又稱夏季時間,或者夏時制。
它是為節約能源而人為規定地方時間的制度。一般在天亮早的夏季人為將時間提前一小時,可以使人早起早睡,減少照明量,以充分利用光照資源,從而節約照明用電。
全球約40%的國家在夏季使用夏令時,其他國家則全年只使用標準時間。標準時間在有的國家也因此被相應地稱為冬季時間。
在施行夏令時的國家,一年裡面有一天只有23小時(夏令時開始那一天),有一天有25小時(夏令時結束那一天),其他時間每天都是24小時。
綠色部分為2019年統計的在全球施行冬夏令時的國家和地區。
夏令時的歷史
1784年,美國駐法國大使本傑明·富蘭克林(Benjamin Franklin)提出“日光節約時間制”。1908年,英國建築師威廉·維萊特(William Willett)再次提出,但當時該提案並未被採納。
1916年,處於一戰時期的德國政府下令將時鐘推至一個小時後,通過獲得額外一小時的日光來節省戰爭所需的煤炭,成為第一個實行夏時制的國家。隨後,英法俄美四個一戰參戰國紛紛效仿。
美國在一戰結束後於1919年取消夏時制,但在1942年二戰時,美國重新啟動夏令時制,1966年正式立法確定永久使用。1973至1975年石油危機爆發期間,美國連續兩年延長夏令時制,以節省石油。
歐洲大部分國家則是從1976年——第四次中東戰爭導致首次石油危機(1973年)的3年後才開始施行夏令時制。
1986年4月,中國國務院辦公廳發出《在全國範圍內實行夏時制的通知》,要求全民早睡早起節約能源:每年4月中旬的第一個星期日2時,將時鐘撥快一小時;10月中旬第一個星期日的2時,再將時鐘撥慢一小時。但此夏令時只實行了6年,在1992年停止施行,主因是中國東西地域廣闊卻只奉行一個北京時間,實時夏令時制帶來很多不切實際的反效果。
夏令時的爭議
從過去的100多年來看,夏令時往往是在國家發生嚴重危機(如戰爭和能源短缺)的情況下才會受到青睞。而在相對和平的近10年裡,這種時間制度則變得越來越不受歡迎。
它會使得人們的生物鐘被擾亂,常常陷入睡眠不足的情況,不僅對人體健康有害、導致車禍,還會對旅遊、航空領域造成極大的混亂。
另外,冬、夏令時究竟能否起到節能的作用,也仍有待商榷。美國一項截至2014年3月的研究表明,這種時間轉換制度最多能在3、4月幫助美國減少1%的用電量,而美國國家標準局則認為,夏令時對用電量沒有絲毫影響。
在俄羅斯,此前的一份報告也顯示,夏令時幫助俄羅斯每年節約的電量,僅相當於兩三個火力發電廠的發電量,十分的“雞肋”。
去年(2019年)3月26日,作為全世界第一個提出並實行夏令時的國家,德國,在歐洲議會上以410比192的贊成票通過了取消冬、夏令時轉換制提案,擬定於2021年4月起,所有歐盟國家不再實行冬、夏令時轉換。待各成員國形成最終法案後,將選擇永久使用夏令時時間或是冬令時時間。
五、本地時間
在日常生活中所使用的時間我們通常稱之為本地時間。這個時間等於我們所在(或者所使用)時區內的當地時間,它由與世界標準時間(UTC)之間的偏移量來定義。這個偏移量可以表示為 UTC- 或 UTC+,後面接上偏移的小時和分鐘數。
六、JavaScript中的Date
得到本地時間,在不同時區列印 new Date() ,輸出的結果將會不一樣:
new Date();
得到本地時間距 1970年1月1日午夜(GMT時間)之間的毫秒數:
new Date().getTime();
返回本地時間與 GMT 時間之間的時間差,以分鐘為單位:
new Date().getTimezoneOffset();
如何在任何地方都能正確顯示當地時間(只要知道該地的timezone):
//目標表時間,東八區
let timezone = 8;
//獲取本地時間與格林威治時間的時間差(注意是分鐘,記得轉換)
const diff = new Date().getTimezoneOffset();
//根據本地時間和時間差獲得格林威治時間
const absTime = new Date().getTime() + diff * 60 * 1000;
//根據格林威治時間和各地時區,得到各地時區的時間
let localTime = new Date(absTime + timeZone * 60 * 60 * 1000);
//處理夏令時(isDST為自己封裝的處理方法)
if(isDST(localTime, country)) {
localTime = new Date(absTime + (timeZone + 1) * 60 * 60 * 1000);
}
return localTime;
結語
以上分別從定義、來源等維度解釋和擴充套件說明了GMT、UTC、時區和夏令時的概念、歷史、意義,並在最後列舉了這些概念在JS專案中的一個非常實用的應用。
簡單地講, GMT 是以前的世界時間標準;UTC 是現在在使用的世界時間標準;時區是基於格林威治子午線來偏移的,往東為正,往西為負;夏令時是地方時間制度,施行夏令時的地方,每年有2天很特殊(一天只有23個小時,另一天有25個小時)。
從源頭上徹底瞭解了這些概念,將會讓我們在處理與時間相關的問題時如虎添翼。
文章同時發表於公眾號「前端手札」,喜歡的話可以關注一下哦。
本文作者:ChampYin
轉載請註明出處:https://champyin.com/2020/04/24/徹底弄懂GMT、UTC、時區和夏令時