out.println(session.getLastAccessedTime());的返回值到底是毛線意思???


out.println(session.getLastAccessedTime());這個語句是輸出最后一次成功獲取session對象Attribute值的一個指令, 他的返回值是一個long型數據, 具體數值為1448334229658.

其實現在你們看到的這個long型數據是隨時在變化的, 這個數字是時間在2015-11-24 11:04:02時的數據, 再詳細點的解釋就是2015-11-24 11:04:02距離1970-1-1 0:0:0的毫秒數.

為什么會是這個時間? 不止是這里, 包括很多其他編程語言還有Oracle數據庫都是以1970-1-1 0:0:0作為時間原點, 這個時間發生了什么事? 下面請看前方發來的報道......

 

 

網上的解釋說:

java起源於UNIX系統,而UNIX認為1970110點是時間紀元.但這依然沒很好的解釋"為什么",出於好奇,繼續Google,總算找到了答案:

最初計算機操作系統是32位,而時間也是用32位表示。

System.out.println(Integer.MAX_VALUE);

結果為2147483647

IntegerJAVA內用32位表示,因此32位能表示的最大值是2147483647。另外1年365天的總秒數是31536000,

2147483647/31536000 = 68.1

也就是說32位能表示的最長時間是68年,而實際上到20380119031407秒,便會到達最大時間,過了這個時間點,所有32位操作系統時間便會變為

10000000 00000000 00000000 00000000

也就是19011213204552秒,這樣便會出現時間回歸的現象,很多軟件便會運行異常了。到這里,我想問題的答案已經出來了:

因為用32位來表示時間的最大間隔是68年,而最早出現的UNIX操作系統考慮到計算機產生的年代和應用的時限綜合取了197011日作為UNIX TIME的紀元時間(開始時間),而java自然也遵循了這一約束。

至於時間回歸的現象相信隨着64為操作系統的產生逐漸得到解決,因為用64位操作系統可以表示到292,277,026,596124153008秒,相信我們的N代子孫,哪怕地球毀滅那天都不用愁不夠用了,因為這個時間已經是千億年以后了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM