Java的日期類的時間從爲何是從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系統,而UNIX認爲1970年1月1日0點是時間紀元。
-----------------------------------------------------------------------------
但這依然沒很好的解釋"爲何",出於好奇,繼續Google,總算找到了答案,在維基百科:
http://en.wikipedia.org/wiki/Unix_time
-----------------------------------------------------------------------------
這裏的解釋是:java

最初計算機操做系統是32位,而時間也是用32位表示。
System.out.println(Integer.MAX_VALUE); // 2147483647
Integer在JAVA內用32位表示,所以32位能表示的最大值是2147483647秒。
另外1年365天的總秒數是31536000秒,
2147483647/31536000 = 68.1年
也就是說32位能表示的最長時間是68年,而實際上到2038年01月19日03時14分07秒,便會到達最大時間,過了這個時間點,全部32位操做系統時間便會變爲:
10000000 00000000 00000000 00000000
也就是1901年12月13日20時45分52秒,這樣便會出現時間迴歸的現象,不少軟件便會運行異常了。
-----------------------------------------------------------------------------
到這裏,我想問題的答案已經出來了:ide

由於用32位來表示時間的最大間隔是68年,而最先出現的UNIX操做系統考慮到計算機產生的年代和應用的時限綜合取了1970年1月1日做爲UNIX TIME的紀元時間(開始時間),而java天然也遵循了這一約束。
至於時間迴歸的現象相信隨着64爲操做系統的產生逐漸獲得解決,由於用64位操做系統能夠表示到292,277,026,596年12月4日15時30分08秒,相信咱們的N代子孫,哪怕地球毀滅那天都不用愁不夠用了,由於這個時間已是千億年之後了。
-----------------------------------------------------------------------------
最後一個問題:操作系統

System.out.println(new Date(0));  ip

打印出來的時間是8點而非0點,緣由是存在系統時間本地時間的問題,其實系統時間依然是0點,只不過個人電腦時區設置爲東8區,故打印的結果是8點。
-----------------------------------------------------------------------------get

相關文章
相關標籤/搜索