尋夢新聞LINE@每日推播熱門推薦文章,趣聞不漏接❤️
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點。
‘,