1. 程式人生 > >為什麼java中的時間是從1970年1月1日開始的?

為什麼java中的時間是從1970年1月1日開始的?

問題:Date date = new Date(0);
System.out.println(date);
打印出來的結果:Thu Jan 01 08:00:00 CST 1970
也是1970年1月1日,實際上時分秒是0點0分0秒(這裡打印出來是8點,稍後會作解釋)。

原因:java起源於UNIX系統,而UNIX認為1970年1月1日0點是時間紀元.最初計算機作業系統是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秒,這樣便會出現時間迴歸的現象,很多軟體便會運 行異常了。

總結:到這裡,我想問題的答案已經出來了:

因為用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)),打印出來的時間是8點而非0點,原因是存在系統時間和本地時間的問題,其實系統時間依然是0點,只不過我們使用的是北京時間,屬於東8區,故列印的結果是8點。

本文整理自網路