日期類的時間從為什么是從1970年1月1日

I suspect that Java was born and raised on a UNIX system.? UNIX considers the epoch (when did time begin) to be midnight, January 1, 1970.

是說java起源于UNIX系統(tǒng),而UNIX認為1970年1月1日0點是時間紀元.但這依然沒很好的解釋"為什么",出于好奇,繼續(xù)Google,總算找到了答案:? ? ? ? http://en.wikipedia.org/wiki/Unix_time

這里的解釋是:最初計算機操作系統(tǒng)是32位,而時間也是用32位表示。System.out.println(Integer.MAX_VALUE):2147483647

Integer在JAVA內(nèi)用32位表 示,因此32位能表示的最大值是2147483647。

另外1年365天的總秒數(shù)是31536000,

2147483647/31536000 = 68.1

也就是說32位能表示的最長時間是68年,而實際上到2038年01月19日03時14分07秒,便會到達最大時間,過了這個時間點,所有32位操作系統(tǒng)時間便會變?yōu)?/p>

10000000 00000000 00000000 00000000

也就是1901年12月13日20時45分52秒,這樣便會出現(xiàn)時間回歸的現(xiàn)象,很多軟件便會運行異常了。到這里,我想問題的答案已經(jīng)出來了:因為用32位來表示時間的最大間隔是68年,而最早出現(xiàn)的UNIX操作系統(tǒng)考慮到計算機產(chǎn)生的年代和應用的時限綜合取了1970年1月1日作為UNIX TIME的紀元時間(開始時間),而java自然也遵循了這一約束。至于時間回歸的現(xiàn)象相信隨著64為操作系統(tǒng)的產(chǎn)生逐漸得到解決,因為用64位操作系統(tǒng)可以表示到292,277,026,596年12月4日15時30分08秒,相信我們的N代子孫,哪怕地球毀滅那天都不用愁不夠用了,因為這個時間已經(jīng)是千億年以后了。

最后一個問題:

????上面System.out.println(new Date(0)),打印出來的時間是8點而非0點,原因是存在系統(tǒng)時間和本地時間的問題,其實系統(tǒng)時間依然是0點,只不過我的電腦時區(qū)設置為東8區(qū),故打印的結(jié)果是8點。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容