引言:
今天我們來討論一個(gè)非常有意思的事银酗,那就是你知道為什么計(jì)算機(jī)時(shí)間和眾多的編程語言的時(shí)間都要從1970年1月1日開始算起呢,時(shí)間計(jì)時(shí)起點(diǎn)到底為什么是 1970年1月1號呢良狈?我想大家應(yīng)該都知道后添,但是我估計(jì)大家?guī)缀醮蟛糠侄紱]有想過這個(gè)問題。我們就一起來聊聊,這是為什么遇西?
I. 最懶的解釋
很多編程語言起源于UNIX
系統(tǒng)馅精,而UNIX
系統(tǒng)認(rèn)為1970年1月1日0點(diǎn)是時(shí)間紀(jì)元,所以我們常說的UNIX
時(shí)間戳是以1970年1月1日0點(diǎn)為計(jì)時(shí)起點(diǎn)時(shí)間的粱檀。
說了這個(gè)懶人的解釋洲敢,估計(jì)大家還沒有懂得真正的意思。所以我們接下來深入的了解一下茄蚯。
II. 深入的了解
最初計(jì)算機(jī)操作系統(tǒng)是32位压彭,而時(shí)間也是用32位表示。
System.out.println(Integer.MAX_VALUE);
// 2147483647
Integer
在JAVA內(nèi)用32位表示渗常,因此32位能表示的最大值是2147483647壮不。另外1年365 天的總秒數(shù)是 31536000,2147483647/31536000 = 68.1皱碘,也就是說32位能表示的最長時(shí)間是68年询一,從1970年開始的話,加上68.1癌椿,實(shí)際最終到2038年01月19日03時(shí)14分07秒健蕊,便會到 達(dá)最大時(shí)間,過了這個(gè)時(shí)間點(diǎn)踢俄,所有32位操作系統(tǒng)時(shí)間便會變?yōu)?0000000 00000000 00000000 00000000缩功,算下來也就是1901年12月13日20時(shí)45分52秒,這樣便會出現(xiàn)時(shí)間回歸的現(xiàn)象都办,很多軟件便會運(yùn)行異常了嫡锌。
到這里,我想問題的答案已經(jīng)顯現(xiàn)出來了脆丁,那就是:
因?yàn)橛?2位來表示時(shí)間的最大間隔是68年世舰,而最早出現(xiàn)的UNIX操作系統(tǒng)考慮到計(jì)算機(jī)產(chǎn)生的年代和應(yīng)用的 時(shí)限綜合取了1970年1月1日作為UNIX TIME的紀(jì)元時(shí)間(開始時(shí)間),至于時(shí)間回歸的現(xiàn)象相信隨著64為操作系統(tǒng)的產(chǎn)生逐漸得到解決槽卫,因?yàn)橛?4位操作系統(tǒng)可以表示到 292,277,026,596年12月4日15時(shí)30分08秒跟压,相信我們的N代子孫,哪怕地球毀滅那天都不用愁不夠用了歼培,因?yàn)檫@個(gè)時(shí)間已經(jīng)是千億年以后 了震蒋。