• May 2, 2024

【電腦時間 1970】UNIX時間 |為什麼電腦的起始時間是1970年1月1日呢 |為什麼計算機起始時間是1970年1月1日 |

UNIX時間,或稱POSIX時間是UNIX或類UNIX系統使用時間表示方式:UTC1970年1月1日0時0分0秒起現在總秒數,考慮閏秒[1]。 多數Unix系統上Unix時間可以透過date +%s指令來檢查。

版本Unix時間是32位整型,60 Hz增加。1971年11月3日發行第一版《Unix Programmer’s Manual》定義了Unix時間「the time since 00:00:00, 1 January 1971, measured in sixtieths of a second」,即1971年1月1日00:00:00開始,60赫茲增加。[2]這意味着32位無符號整型存儲Unix時間,829天(2.5年)後用盡重置。於該限制,Unix時間原點義多次,直至開始採用1970年1月1日00:00:00UTC時間原點,1赫茲計時。於Unix和C語言採用32位有符號整型表示時間,這可容納約136年時間跨度,1970年之前和之後各佔一半。即到2038年1月19日和1901月12月13日用盡重置。

此後,這個Unix 時間定義考慮到時區,閏秒問題修訂。

現時大部分使用UNIX系統是32位元,即它們會32位有符號整數表示時間類型time_t。因此它可以表示136年秒數。表示協調世界時間1901年12月13日星期五20時45分52秒2038年1月19日3時14分07秒(二進制:01111111 11111111 11111111 11111111,0x7FFF:FFFF),下一秒二進制數字會是10000000 00000000 00000000 00000000(0x8000:0000),這是負數,因此各系統會時間誤解作1901年12月13日20時45分52秒(有可能回歸到1970年)。這時可能會令軟體發生問題,導致系統癱瘓。

1970-01-01於開發者來説是陌生,有些系統於時間處理如果不夠話,可能時間顯示成1970-01-01,所以經常有用户看到1970-01-01這個時間。

這種情況是可以復現,我們嘗試使用以下Java代碼定義時間:

該構造函數接收用户指定一個毫秒數,如new Date(1000),表示獲得一個距離”epoch”有1000毫秒時間。Java中,這個時間是1970, 00:00:00 GMT。

1969年8月,貝爾實驗室程序員肯湯普遜利用妻兒離開一個月機會,開始着手創造一個革命性操作系統,他使用B編譯語言老舊PDP-7機器上開發出了Unix一個版本。

隨後,湯普遜和同事丹尼斯裏奇改進了B語言,開發出了C語言,重寫了Unix,新版於1971年發佈。

Unix發明出來後,需要Unix上表示時間,需要想辦法定義一個能表示一份數據某個時間之前存在、、可驗證數據來表示時間。

於是,Unix時間戳定義出來,即通過當前時間和一個”紀元時間”進行比,其間相差秒數作為時間戳。

讓Unix時間戳表示時間這種方式儘可能,最初Unix誕生時間1971-1-1定義成”紀元時間”。

開始時間是1971-1-1而不是1970-1-1外,最初時間戳不是每增加1秒時間戳變動一次,而是每1/60秒會改變一次時間戳。

另外,Unix是1971年發明出來,當時計算機系統是32位,如果32表示有整數,那麼最大值是2147483647(2^31-1)。

那麼,做一個數學計算,如果當時時間戳計算方式來表示時間話,Unix時間戳多可以使用4294967296/(60*60*24)/60 = 828.5天(一天有60*60*24秒,每1/60秒會佔用一個時間戳)。

想象一下,設計出一個計算機系統,他時間只能表示 828.5天,是不是讓人接受,但是最初Unix確實是這樣。

後來,Unix開發者們意識到這樣不是長計,於是開始做出改變。

開始,他們每1/60秒改變一次時間戳修改成每1秒改變一次時間戳。這樣時間戳可以表示時間放大了60倍。這時候有828.5*60/365 = 136年。

這時候,一方面136年足夠了,紀元時間向前調一下影響。另外一方面記憶和使用。

於是,後面各種開發語言誕生,沿襲了1970-1-1這個設定。

可選中1個或多個下面關鍵詞,搜索相關資料。可直接點“搜索資料”搜索整個問題。

今天,來和大家地聊一下,有關手機、平板、電腦初始日期,啥只能設置到1970年1月1日事兒吧。

記得一年之前,蘋果手機出過一個Bug麼?

用户系統日期調整成1970年1月1日,會導致手機無限死機,重啟不能解決問題,只能送到蘋果官方售後天才吧(Genius Bar)尋求幫助。

無限重啟了,傷不起~~

其實,寶寶們,你們有發現沒?你們應該注意到了,電子設備系統日期,電腦、手機上各種文件、文件夾日期,是會1970年1月1日了。

買過手機小白同學,看到手機、電腦裏有一些文件,日期是1970年1月1日,會懷疑人家賣自己,是一個古董貨。

沒這樣擔心啦,方要是賣你一個1970年古董,那是能進博物館級別了,這麼交易,你虧呢~~

即使是這款Apple II,是上個世紀80年代起產物了

延伸閱讀…

UNIX時間- 維基百科,自由的百科全書

漫話:為什麼計算機起始時間是1970年1月1日?

,重回正題~~

要解釋這個問題,計算機編程原理開始了,大家準備好了嗎?看不懂沒有關係,直接關注加粗部分行。

最初,CPU和配合計算機作業系統,是32位,所以時間是32位表示。

這個數字是不是很熟悉?沒錯,231次方-1 !

Integer JAVA內用32位表示,因此32位能表示最大值是2147483647。

另外1年365天總秒數是 31536000,2147483647/31536000 = 68.1,説32位,即2147483647秒,能表示時間是68年。

出現UNIX作業系統,考慮到計算機產生年代和應用時限(1968年誕生),所以綜合取了1970年1月1日作為UNIX TIME紀元時間,而java遵循了這一約束。

1970年開始,過了68.1年,到了2038年01月19日03時14分07秒,會到達32位系統表示時間。

過了這個時間點,所有32位作業系統時間會變為10000000 00000000 00000000 00000000,算下來1901年12月13日20時45分52秒,這樣會出現時間回歸現象,很多軟體會運行了。

2000年之前幾年,人們擔心「千年蟲」問題,但問題解決了

好奇心寶寶會説了,剛才表述方法,32位時間是,那我們電腦、手機硬體系統和軟體系統,一起升級到64位,或是128位,問題解決了麼?

延伸閱讀…

為什麼電腦的起始時間是1970年1月1日呢?

1970年1月1日那天,發生了什麼?

是,你,計算機工程師們,是這麼想~~

大家應該知道次方威力,264次方能表示數,232次方要:

上述規則除以2,那是一個達18位超級大數字,2147483647要大多了喲~~

感同學們,可以計算一下這個數字秒來計,能表達多少年吧~~

emm……還是1970年1月1日開始計算起,是 292,277,026,596年12月4日15時30分08秒。

嘖嘖,2億年後,你我不在了,人類會存在麼~~

大家應該聽説過iPhone 5S時代,蘋果推出64位架構A7吧,後來Android陣營跟進了,現在基本上主流電腦、手機,運行是64位作業系統,部分軟體,開始添加64位支持。

1970年1月1日開始,和2038年01月19日故事,到這裡結束了。

所謂32位、64位作業系統和相關硬體,是指CPU一次能處理隊列序令能力,32位是執行32位數據,64位是執行64位數據。

理論上來説,64位處理器運算能力,要32位要強一倍,要看CPU其他指標,這個不能而論。

而且運算能力之外,32位處理器相比,64位處理器優勢體現系統內存控制上。

沒錯,32位作業系統能夠管理內存數,4294967296位,換算下來,這個數據是4GB。

加上系統保留內存數,和一些其他要利用空間,32位系統支持內存數,只剩下3個G多一點了。

64位系統支持內存量,32位大很多,目前64位桌面級Windows系統,可以支持128GB內存,家庭電腦配備內存容量,還是4GB、8GB級別,所以64位作業系統+64位硬體,是未來一段時間裡,我們選購硬體平台最佳選擇。

64位作業系統流向個人計算機則出現2003年,隨後過幾年64位作業系統取代了32位作業系統,成為電腦標配作業系統。

小編記得是去年底時候,有一位蘋果用户系統時間調整成了1970年1月1日,結果導致手機陷入無限死機,重啟不能解決問題,後到蘋果官方售後天才吧尋求幫助,所謂genius bar所以説,細心寶寶可能有發現電子設備系統日期,電腦手機上各種文件、文件夾裏