前言
格林威治時間赦颇、世界時、祖魯時間赴涵、GMT媒怯、UTC、跨時區(qū)句占、夏令時沪摄,這些眼花繚亂的時間術(shù)語,我們可能都不陌生纱烘,但是真正遇到問題杨拐,可能又不那么確定,不得不再去查一查擂啥,處理完可能過段時間又忘記哄陶。今天,我們徹底來梳理一下它們哺壶。
一屋吨、GMT
什么是GMT
GMT(Greenwich Mean Time), 格林威治平時(也稱格林威治時間)山宾。
它規(guī)定太陽每天經(jīng)過位于英國倫敦郊區(qū)的皇家格林威治天文臺的時間為中午12點至扰。
GMT的歷史
格林威治皇家天文臺為了海上霸權(quán)的擴(kuò)張計劃,在十七世紀(jì)就開始進(jìn)行天體觀測资锰。為了天文觀測敢课,選擇了穿過英國倫敦格林威治天文臺子午儀中心的一條經(jīng)線作為零度參考線,這條線绷杜,簡稱格林威治子午線直秆。
1884年10月在美國華盛頓召開了一個國際子午線會議,該會議將格林威治子午線設(shè)定為本初子午線鞭盟,并將格林威治平時 (GMT, Greenwich Mean Time) 作為世界時間標(biāo)準(zhǔn)(UT, Universal Time)圾结。由此也確定了全球24小時自然時區(qū)的劃分,所有時區(qū)都以和 GMT 之間的偏移量做為參考齿诉。
1972年之前筝野,格林威治時間(GMT)一直是世界時間的標(biāo)準(zhǔn)晌姚。1972年之后,GMT 不再是一個時間標(biāo)準(zhǔn)了歇竟。
二舀凛、UTC
什么是UTC
UTC(Coodinated Universal Time),協(xié)調(diào)世界時途蒋,又稱世界統(tǒng)一時間猛遍、世界標(biāo)準(zhǔn)時間、國際協(xié)調(diào)時間号坡。由于英文(CUT)和法文(TUC)的縮寫不同懊烤,作為妥協(xié),簡稱UTC宽堆。
UTC 是現(xiàn)在全球通用的時間標(biāo)準(zhǔn)腌紧,全球各地都同意將各自的時間進(jìn)行同步協(xié)調(diào)。UTC 時間是經(jīng)過平均太陽時(以格林威治時間GMT為準(zhǔn))畜隶、地軸運動修正后的新時標(biāo)以及以秒為單位的國際原子時所綜合精算而成壁肋。
在軍事中,協(xié)調(diào)世界時會使用“Z”來表示籽慢。又由于Z在無線電聯(lián)絡(luò)中使用“Zulu”作代稱浸遗,協(xié)調(diào)世界時也會被稱為"Zulu time"。
UTC 由兩部分構(gòu)成:
原子時間(TAI, International Atomic Time):
結(jié)合了全球400個所有的原子鐘而得到的時間箱亿,它決定了我們每個人的鐘表中跛锌,時間流動的速度。世界時間(UT, Universal Time):
也稱天文時間届惋,或太陽時髓帽,他的依據(jù)是地球的自轉(zhuǎn),我們用它來確定多少原子時脑豹,對應(yīng)于一個地球日的時間長度郑藏。
UTC的歷史
1960年,國際無線電咨詢委員會規(guī)范統(tǒng)一了 UTC 的概念瘩欺,并在次年投入實際使用必盖。
“Coordinated Universal Time”這個名字則在1967年才被正式采納。
1967年以前击碗, UTC被數(shù)次調(diào)整過筑悴,原因是要使用閏秒(leap second)來將 UTC 與地球自轉(zhuǎn)時間進(jìn)行統(tǒng)一们拙。
三稍途、GMT vs UTC
GMT是前世界標(biāo)準(zhǔn)時,UTC是現(xiàn)世界標(biāo)準(zhǔn)時砚婆。
UTC 比 GMT更精準(zhǔn)械拍,以原子時計時突勇,適應(yīng)現(xiàn)代社會的精確計時。
但在不需要精確到秒的情況下坷虑,二者可以視為等同甲馋。
每年格林尼治天文臺會發(fā)調(diào)時信息,基于UTC迄损。
四定躏、時區(qū)
隨著火車鐵路與其他交通和通訊工具的發(fā)展,以及全球化貿(mào)易的推動芹敌,各地使用各自的當(dāng)?shù)靥枙r間帶來了時間不統(tǒng)一的問題痊远,在19世紀(jì)催生了統(tǒng)一時間標(biāo)準(zhǔn)的需求,時區(qū)由此誕生氏捞。
時區(qū)是如何定義的
從格林威治本初子午線起碧聪,經(jīng)度每向東或者向西間隔15°,就劃分一個時區(qū)液茎,在這個區(qū)域內(nèi)逞姿,大家使用同樣的標(biāo)準(zhǔn)時間。
但實際上捆等,為了照顧到行政上的方便滞造,常將1個國家或1個省份劃在一起。所以時區(qū)并不嚴(yán)格按南北直線來劃分栋烤,而是按自然條件來劃分断部。另外:由于目前,國際上并沒有一個批準(zhǔn)各國更改時區(qū)的機(jī)構(gòu)班缎。一些國家會由于特定原因改變自己的時區(qū)蝴光。
全球共分為24個標(biāo)準(zhǔn)時區(qū),相鄰時區(qū)的時間相差一個小時达址。
在不同地區(qū)蔑祟,同一個時區(qū)往往會有很多個不同的時區(qū)名稱,因為名稱中通常會包含該國該地區(qū)的地理信息沉唠。在夏令時期間疆虚,當(dāng)?shù)氐臅r區(qū)名稱及字母縮寫會有所變化(通常會包含“daylight”或“summer”字樣)。
例如美國東部標(biāo)準(zhǔn)時間叫:EST满葛,Estern Standard Time径簿;而東部夏令時間叫:EDT,Estern Daylight Time嘀韧。
想查看世界所有時區(qū)的名字可以訪問這個網(wǎng)站:
https://www.timeanddate.com/time/zones/
四篇亭、夏令時
什么是夏令時
DST(Daylight Saving Time),夏令時又稱夏季時間锄贷,或者夏時制译蒂。
它是為節(jié)約能源而人為規(guī)定地方時間的制度曼月。一般在天亮早的夏季人為將時間提前一小時,可以使人早起早睡柔昼,減少照明量哑芹,以充分利用光照資源,從而節(jié)約照明用電捕透。
全球約40%的國家在夏季使用夏令時聪姿,其他國家則全年只使用標(biāo)準(zhǔn)時間。標(biāo)準(zhǔn)時間在有的國家也因此被相應(yīng)地稱為冬季時間乙嘀。
在施行夏令時的國家咳燕,一年里面有一天只有23小時(夏令時開始那一天),有一天有25小時(夏令時結(jié)束那一天)乒躺,其他時間每天都是24小時招盲。
綠色部分為2019年統(tǒng)計的在全球施行冬夏令時的國家和地區(qū)。
夏令時的歷史
1784年嘉冒,美國駐法國大使本杰明·富蘭克林(Benjamin Franklin)提出“日光節(jié)約時間制”曹货。1908年,英國建筑師威廉·維萊特(William Willett)再次提出讳推,但當(dāng)時該提案并未被采納顶籽。
1916年,處于一戰(zhàn)時期的德國政府下令將時鐘推至一個小時后银觅,通過獲得額外一小時的日光來節(jié)省戰(zhàn)爭所需的煤炭礼饱,成為第一個實行夏時制的國家。隨后究驴,英法俄美四個一戰(zhàn)參戰(zhàn)國紛紛效仿镊绪。
美國在一戰(zhàn)結(jié)束后于1919年取消夏時制,但在1942年二戰(zhàn)時洒忧,美國重新啟動夏令時制蝴韭,1966年正式立法確定永久使用。1973至1975年石油危機(jī)爆發(fā)期間熙侍,美國連續(xù)兩年延長夏令時制榄鉴,以節(jié)省石油。
歐洲大部分國家則是從1976年——第四次中東戰(zhàn)爭導(dǎo)致首次石油危機(jī)(1973年)的3年后才開始施行夏令時制蛉抓。
1986年4月庆尘,中國國務(wù)院辦公廳發(fā)出《在全國范圍內(nèi)實行夏時制的通知》,要求全民早睡早起節(jié)約能源:每年4月中旬的第一個星期日2時巷送,將時鐘撥快一小時驶忌;10月中旬第一個星期日的2時,再將時鐘撥慢一小時惩系。但此夏令時只實行了6年位岔,在1992年停止施行,主因是中國東西地域廣闊卻只奉行一個北京時間堡牡,實時夏令時制帶來很多不切實際的反效果抒抬。
夏令時的爭議
從過去的100多年來看,夏令時往往是在國家發(fā)生嚴(yán)重危機(jī)(如戰(zhàn)爭和能源短缺)的情況下才會受到青睞晤柄。而在相對和平的近10年里擦剑,這種時間制度則變得越來越不受歡迎。
它會使得人們的生物鐘被擾亂芥颈,常常陷入睡眠不足的情況惠勒,不僅對人體健康有害、導(dǎo)致車禍爬坑,還會對旅游纠屋、航空領(lǐng)域造成極大的混亂。
另外盾计,冬售担、夏令時究竟能否起到節(jié)能的作用,也仍有待商榷署辉。美國一項截至2014年3月的研究表明族铆,這種時間轉(zhuǎn)換制度最多能在3、4月幫助美國減少1%的用電量哭尝,而美國國家標(biāo)準(zhǔn)局則認(rèn)為哥攘,夏令時對用電量沒有絲毫影響。
在俄羅斯材鹦,此前的一份報告也顯示逝淹,夏令時幫助俄羅斯每年節(jié)約的電量,僅相當(dāng)于兩三個火力發(fā)電廠的發(fā)電量桶唐,十分的“雞肋”创橄。
去年(2019年)3月26日,作為全世界第一個提出并實行夏令時的國家莽红,德國妥畏,在歐洲議會上以410比192的贊成票通過了取消冬、夏令時轉(zhuǎn)換制提案安吁,擬定于2021年4月起醉蚁,所有歐盟國家不再實行冬、夏令時轉(zhuǎn)換鬼店。待各成員國形成最終法案后网棍,將選擇永久使用夏令時時間或是冬令時時間。
五妇智、本地時間
在日常生活中所使用的時間我們通常稱之為本地時間滥玷。這個時間等于我們所在(或者所使用)時區(qū)內(nèi)的當(dāng)?shù)貢r間氏身,它由與世界標(biāo)準(zhǔn)時間(UTC)之間的偏移量來定義。這個偏移量可以表示為 UTC- 或 UTC+惑畴,后面接上偏移的小時和分鐘數(shù)蛋欣。
六、JavaScript中的Date
得到本地時間如贷,在不同時區(qū)打印 new Date() 陷虎,輸出的結(jié)果將會不一樣:
new Date();
得到本地時間距 1970年1月1日午夜(GMT時間)之間的毫秒數(shù):
new Date().getTime();
返回本地時間與 GMT 時間之間的時間差,以分鐘為單位:
new Date().getTimezoneOffset();
如何在任何地方都能正確顯示當(dāng)?shù)貢r間(只要知道該地的timezone):
//目標(biāo)表時間杠袱,東八區(qū)
let timezone = 8尚猿;
//獲取本地時間與格林威治時間的時間差(注意是分鐘,記得轉(zhuǎn)換)
const diff = new Date().getTimezoneOffset();
//根據(jù)本地時間和時間差獲得格林威治時間
const absTime = new Date().getTime() + diff * 60 * 1000;
//根據(jù)格林威治時間和各地時區(qū)楣富,得到各地時區(qū)的時間
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;
結(jié)語
以上分別從定義纹蝴、來源等維度解釋和擴(kuò)展說明了GMT缠劝、UTC、時區(qū)和夏令時的概念骗灶、歷史惨恭、意義,并在最后列舉了這些概念在JS項目中的一個非常實用的應(yīng)用耙旦。
簡單地講脱羡, GMT 是以前的世界時間標(biāo)準(zhǔn);UTC 是現(xiàn)在在使用的世界時間標(biāo)準(zhǔn)免都;時區(qū)是基于格林威治子午線來偏移的锉罐,往東為正,往西為負(fù)绕娘;夏令時是地方時間制度脓规,施行夏令時的地方,每年有2天很特殊(一天只有23個小時险领,另一天有25個小時)侨舆。
從源頭上徹底了解了這些概念,將會讓我們在處理與時間相關(guān)的問題時如虎添翼绢陌。
文章同時發(fā)表于公眾號「前端手札」挨下,喜歡的話可以關(guān)注一下哦。
本文作者:ChampYin
轉(zhuǎn)載請注明出處:https://champyin.com/2020/04/24/徹底弄懂GMT脐湾、UTC臭笆、時區(qū)和夏令時