java爲何計算時間從1970年1月1日開始

今天在看Python  API 時,看到 time 模塊 : 

The epoch is the point where the time starts. On January 1st of that year, at 0 hours,the 「time since the epoch」 is zero. For Unix, the epoch is 1970. To find out what the epoch is, look at gmtime(0).java



定義time  1970  1  1 日開始,突然想到在 JAVA 裏, Oracle 數據庫時間也是從 1970
 1  1 日開始計算。好比 java 類代碼 

Date面試

date = new Date(0);
System.out.println(date);

打印出來的結果 : 

Thu Jan 01 08:00:00 CST 1970

也是 1970    1    1  日,實際上時分秒是  0    0    0    (  這裏打印出來是  8  點,稍後會做解釋  ) 

爲何這個時間會定義在 1970    1    1  日這個時候呢  ? 

因而開始了 Google  ,中文網頁根本找不到答案。 因而試着搜索英文關鍵字  ,    Sun java  論壇總算找到準確的帖子  : 

http://forums.sun.com/thread.jspa?threadID=595140&start=15

其中有一個回覆 : 


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

這裏的解釋是 : 

最初計算機操做系統是 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點。 我想以上問題若是做爲面試題,也能難倒一批人了.
相關文章
相關標籤/搜索