這個困擾程序員50年的問題,終于要被解決了?
?近日,Google、微軟、facebook 和亞馬遜終于忍不了了,聯合呼吁廢除閏秒,什么是閏秒呢?閏秒到底做錯了什么?為什么各大互聯網公司想要廢除他呢?
什么是閏秒?
閏秒概念是 1972 年提出的,之所以有這個概念,主要是因為由于潮汐等自然現象的影響,地球的自轉速度并不是恒定的。
所以,每隔一段時間世界標準時間「協調世界時(UTC)」會依據地球圍繞太陽運動計算的「世界時(UT)」之間出現小的偏差。
所以就需要對協調世界時進行調快或者撥慢1秒來消除這個偏差。
閏秒分為正閏秒和負閏秒,正閏秒表示需要在UTC中插入1秒,負閏秒表示需要在UTC中減少1秒。
閏秒的發生
當科學家們發現”哎呀、今年的地球轉的有點快呀,趕緊加一個閏秒來校正一下吧“,這個時間就會發生”正閏秒”。
當閏秒發生時,就需要通過網絡時間協議NTP (Network time protocol)來進行時間同步,NTP服務器會一級一級地下發閏秒事件通知直到最邊緣的NTP服務器,然后NTP服務器就會把閏秒通知發給客戶端的操作系統,由操作系統來處理閏秒通知。
如果你的計算機系統沒有開啟NTP服務,那么導致的問題就是你的計算機上的機器時間就會比世界時間慢1秒。
如果開了NTP服務的話,就需要操作系統來處理這個閏秒。
閏秒的處理
一般來說,閏秒的調整一般被安排在6月30日或者12月31日,一般會調整在最后一分鐘,也就是說,某一年的6月30日的11:59分有61秒。那么計算機系統會如何處理這個閏秒呢?
一般有以下幾種方式,如:
- 直接顯示23:59:60這樣的時間。
- 顯示兩次23:59:59這個時間。
- 把這一秒平均分到最后一分鐘的每一秒鐘,也就是11:59還是有60秒,但是每一秒的時長是1+1/60 秒。
不同的操作系統,不同操作系統的不同版本,都會有不同的處理方式,所以我們的代碼就需要有足夠的魯棒性來兼容這些閏秒的處理方式,如果沒有做好兼容,那么就會發生各種各樣的問題。
如需要兼容對23:59:60的處理;如操作會出現兩次23:59:59,這對于一些對時間有精確的強依賴的程序來說,可能就會導致致命的問題,尤其是一些依賴時間戳的服務或者工具。
閏秒的危害
50年來,閏秒已經出現過27次,每一次出現都是一片”哀鴻遍野”,如:
2012 年 7 月 1 日零點, Reddit、Mozilla、領英、Yelp 和 Amadeus 等網站宕機數十分鐘。
2015 年 7 月 1 日零點,全球約 2000 個計算機網絡突然短暫中斷;美國洲際交易所被迫中止交易 61 分鐘。
2017 年 1 月 1 日零點,Cloudflare 等云服務廠商服務突然崩潰。
因為閏秒的發生是受自然現象影響的,所以他完全無法預測也沒有任何規律。對于程序員來說,這種無規律的事情,每次發生都需要進行一次特殊處理,而每一次特殊處理都可能要付出慘痛的代價。
所以,這些國際大廠終于忍不了站出來呼吁廢除閏秒了,作為一個程序員,我舉雙手+雙腳贊成!
參考資料:
- https://www.qbitai.com/2022/07/36387.html
- https://www.163.com/dy/article/HD9ESP2T0531M1CO.html?f=post2020_dy_recommendshttps://os.51cto.com/article/345796.html
- https://info.support.huawei.com/infofinder/encyclopedia/zh/NTP.htmlhttps://www.zhihu.com/question/27500849https://qa.1r1g.cn/unix/ask/23322561