問題由來:之前在Python的time,時間是從1970年1月1日0時開始的怠堪,就很好奇韧献,為什么時間都用這個時間點來計算。
早期Unix等機器都是32位研叫,那么表示的時間長度有限锤窑,只能從1901年到2038年,那么過了2038年時間就會回到1901年嚷炉。這樣就有問題渊啰。不過這個最后隨著64位機器的誕生就解決了。因為時間可以表示2^63/86400 ~ 1E14(天) ~ 2.92E11(年),大約是2920億年绘证。
詳解
最初計算機操作系統(tǒng)是32位隧膏,而時間也是用32位表示。
System.out.println(Integer.MAX_VALUE);2147483647?Integer在JAVA內(nèi)用32位表示嚷那,因此32位能表示的最大值是2147483647胞枕。另外1年365天的總秒數(shù)是31536000,2147483647/31536000 = 68.1魏宽。也就是說32位能表示的最長時間是68年腐泻,而實際上到2038年01月19日03時14分07秒,便會到達(dá)最大時間队询,過了這個時間點派桩,所有32位操作系統(tǒng)時間便會變?yōu)?0000000 00000000 00000000 00000000也就是1901年12月13日20時45分52秒,這樣便會出現(xiàn)時間回歸的現(xiàn)象蚌斩,很多軟件便會運行異常了铆惑。
到這里,我想問題的答案已經(jīng)出來了:
因為用32位來表示時間的最大間隔是68年送膳,而最早出現(xiàn)的UNIX操作系統(tǒng)考慮到計算機產(chǎn)生的年代和應(yīng)用的時限綜合取了1970年1月1日作為UNIX TIME的紀(jì)元時間(開始時間)员魏,而java自然也遵循了這一約束。至于時間回歸的現(xiàn)象相信隨著64為操作系統(tǒng)的產(chǎn)生逐漸得到解決叠聋,因為用64位操作系統(tǒng)可以表示到292,277,026,596年12月4日15時30分08秒撕阎,相信我們的N代子孫,哪怕地球毀滅那天都不用愁不夠用了晒奕,因為這個時間已經(jīng)是千億年以后了。
在許多編程語言都是約定俗成的使用1970年1月1日作為UNIX TIME的紀(jì)元時間(開始時間)的前提下名斟,Python為了適用其他程序脑慧,也會遵循這一約束。