今天在看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點。 我想以上問題若是做爲面試題,也能難倒一批人了.