Unix 即將迎來 50 歲
Unix 時間(又稱為“紀元時間”)是自 1970 年 1 月 1 日以來經過的秒數。當 Unix 即將 50 歲時,讓我們看一下讓核心開發人員擔心的地方。
對於 Unix 而言,2020 年是重要的一年。在這一年年初,Unix 進入 50 歲。
儘管 Unix 的某些早期開發早於其“紀元”的正式開始,但 1970 年 1 月 1 日仍然是 POSIX 時間的零點,也是公認的 Unix 的萬物之始。自那一刻算起,2020 年 1 月 1 日將是其 50 週年。(LCTT 譯註:實際上,在 1971/11/3 出版的第一版《Unix 程式設計師手冊》中,將 1971/1/1 作為 Unix 紀元的開始,並且一秒鐘記錄 60 個數,但是後來發現這樣 32 位整型數字只能記錄兩年多,後來這個紀元被一再重新定義,改為從 1970/1/1 開始,每秒 1 個數。)
Unix 時間與人類時間
就人類時間而言,50 年是很重要的。就 Unix 時間而言,50 年沒有什麼特別的。48.7 年同樣重要。
Unix(包括 Linux)系統將日期/時間值儲存為自 1970-01-01 00:00:00 UTC 以來經過的秒數(32 位整型)。要確定自該時間以來經過了多少秒鐘,看看 Unix 時間值是什麼樣子,你可以發出如下命令:
$ date +%s
1576883876
%s
引數告訴 date
命令將當前日期/時間顯示為自 1970-01-01 開始以來的秒數。
Unix 系統可以管理多少時間?
要了解 Unix 系統可以容納多少時間,我們需要檢視 32 位欄位的容量。可以這樣計算:
$ echo '2^32' | bc
4294967296
但是,由於 Unix 需要容納負數,因此它會為數字的符號保留一位,從而將其減少為:
$ echo '2^31' | bc
2147483648
並且,由於 Unix 計數以 0 開頭,這意味著我們有 2,147,483,648 個值,但最大的可能值為 2,147,483,647 個。Unix 日期/時間值不能超過該數字——就像汽車上的里程錶可能不能超過 999,999 英里一樣。加 1 該值就變為了 -2147483648。(LCTT 譯註:此處原文描述有誤,已修改。在達到最大值之後,即 2038/1/19 03:14:07,下 1 秒導致符號位變為 1,其餘 31 位為 0,即 -2147483648,時間變為 1901/12/13 20:45:52,這就是 Y2K38 問題。)
一年有多少秒?
大多數年份的秒數可以這樣計算:每天的小時數乘以每小時的分鐘數乘以每分鐘的秒數乘以一年中的天數:
$ expr 24 \* 60 \* 60 \* 365
31536000
在閏年,我們再增加一天:
$ expr 24 \* 60 \* 60 \* 366
31622400
(LCTT 譯註:Unix 時間將一天精確定義為 24 * 60 * 60 = 86400 秒,忽略閏秒。)
Unix 將如何慶祝其 50 歲生日?
2020 年 1 月 1 日中午 12:00 是紀元時間的 1577836800。這個計算有些棘手,但主要是因為我們必須適應閏年。自該紀元開始以來,我們經歷了 12 個閏年,從 1972 年開始,到上一個閏年是 2016 年。而且,當我們達到 2020 年時,我們將有 38 個常規年份。
這是使用 expr
命令進行的計算,以計算這 50 年的秒數:
$ expr 24 \* 60 \* 60 \* 365 \* 38 + 24 \* 60 \* 60 \* 366 \* 12
1577836800
前半部分是計算 38 個非閏年的秒數。然後,我們加上閏年的 366 天的類似計算。或者,你可以使用前面介紹的每年秒數,然後執行以下操作:
$ expr 31536000 \* 38 + 31622400 \* 12
1577836800
這種跟蹤日期和時間的方式使 Unix 系統完全不受 Y2K 恐慌的影響,1999 年末人們開始擔心進入 2000 年會對計算機系統造成嚴重破壞,但是實際遇到的問題比人們擔心的少得多。實際上,只有以兩位數格式儲存年份的應用程式才會將年份變為 00,以表示時間倒退。儘管如此,許多應用程式開發人員還是做了很多額外的繁瑣工作,以確保 2000 年到來時,他們的系統不會出現嚴重問題。
Unix 時間何時會遇到問題?
在 2038 年之前,Unix 系統不會遇到 Y2K 型別的問題,直到如上所述儲存的日期將超過其 32 位空間分配。但這距離現在已經只有 18 年了,核心開發人員已經在研究如何避免災難。但現在開始恐慌還為時過早。
2038 年的問題有時稱為 Y2K38 問題。我們必須在 2038 年 1 月 19 日星期二之前解決這個問題。如果問題到時候仍未解決,則該日期之後的系統可能會認為是 1901 年。解決該問題的一種方法是切換為日期/時間資訊的 64 位表示形式。有些人認為,即使那樣,也會有比聽起來更復雜的問題。無論如何,恐慌還為時過早。並且,與此同時,也許在新年前夜演唱了《Auld Lang Syne》之後,你可以向 Unix 唱《生日快樂》歌了。Unix 50 歲了,這仍然是大事。
(LCTT 譯註:建議閱讀一下 Unix 時間的維基百科頁面,有更多有趣和不為人知的資訊。)
via: https://www.networkworld.com/article/3511428/unix-is-turning-50-what-does-that-mean.html
作者:Sandra Henry-Stocker 選題:lujun9972 譯者:wxy 校對:wxy
訂閱“Linux 中國”官方小程式來檢視
相關文章
- 2019即將結束進入2020:微軟也即將迎來Win10 2004微軟Win10
- 遊戲行業即將迎來全線漲價?遊戲行業
- 我們即將迎來另一個AI寒冬嗎?AI
- 資料科學即將迎來“無程式碼”時代資料科學
- Vitalik Buterin:以太坊網路‘即將迎來’分片擴容
- 神秘來客 《夢幻西遊》手遊即將迎來全新代言人
- 即將迎來5G無線網路的黃金時代
- JavaScript即將迎來第三個時代或為終結時代? - swyxJavaScript
- Win10系統微軟商店即將迎來更新:帶來遠端安裝新功能Win10微軟
- 馬術競技遊戲即將在日本市場迎來井噴時代?遊戲
- 11歲的React正迎來自己口碑的拐點React
- Silverlight5即將來臨
- 眾至科技:《資訊保安風險評估》國標即將實施,將迎來這些變化!
- 區塊鏈、硬體與面向服務的架構,WASM 即將迎來大爆發?區塊鏈架構ASM
- RxJS 5.5: 即將到來的 pipelineJS
- 網易超能戰術競技鉅製 《量子特攻》重磅首曝 即將迎來首測!
- PeopleFun非凡十年,爆款遊戲《Wordscapes》迎來4歲生日!遊戲
- 預見未來:NLP將迎來黃金十年
- [譯] JavaScript 2018 中即將迎來的新功能:非同步生成器及更好的正規表示式JavaScript非同步
- [翻譯]看看即將到來的 Laravel 10Laravel
- PostgreSQL資料庫將迎來崛起時刻HYSQL資料庫
- FIL是泡沫?比特幣將迎來新的突破比特幣
- 鑑機識變,面向未來|RocketMQ Summit 2022 即將來襲MQMIT
- 一大波碩士即將來襲
- 下一代Spring Cloud即將來臨SpringCloud
- DeepMind 一次性開源 3 個新框架!深度強化學習應用落地即將迎來春天?框架強化學習
- 50歲SQL是一種小眾技能?SQL
- 2022:網路社會將迎來哪些新趨勢?
- 今年秋季 MacBook Pro 將迎來六大變化Mac
- 晶片產業不斷翻新將迎來新的增長晶片產業
- 鴻蒙作業系統及華為全場景新品釋出會即將到來,硬體生態發展有望迎來加速度鴻蒙作業系統
- 獨佔時代或將結束,跨平臺時代即將到來?
- 我的2023--即將30歲的程式設計師,不得不說的那些怨念程式設計師
- 演習準備!《非人學園》和平精嚶九千歲 軟萌蘿莉即將登場
- Steam中國即將到來?V社悄然推出Alpha版本
- 暴雪持有了新域名:暗示著《暗黑4》即將到來?
- 美國2021年程式設計師短缺即將來臨程式設計師
- SafeTitan歸來:新的加密貨幣ICO即將釋出加密