为什么计算机日期最早1970,计算机时间基准——1970.1.1
Unix在1969年誕生之初就采用了一個簡單的設計——以離之最近的新年作為計時零點記錄流逝的秒數。后來這個計時系統被所有的Unix和Unix-like系統繼承了下來。
沈迦勒/編
雨璇/配圖
【Q】劉克澄問:為啥程序猿寫日子都要換算成和1970-1-1的天數?
【A】
沈迦勒答:人們現在使用的計時系統是公歷,計算較為復雜:秒是基本單位,60秒為1分,60分為1小時,24小時是一天…如果計算機內部也使用相同的方式
來計時,
就需要多個變量來分別存放年月日時分秒,不停進位,而且還要處理偶爾的閏年和閏秒以及協調不同的時區。Unix在1969年誕生之初就采用了一個簡單的設
計——以離之最近的新年(1970-1-1
00:00:00,公歷UTC時間,下同)作為計時零點記錄流逝的秒數。后來這個計時系統被所有的Unix和Unix-like系統繼承了下來,而且影響
了許多非Unix系統,便于跨平臺交流數據。POSIX標準,即可移植操作系統接口(Portable Operating System
Interface of
Unix)推出后,這個時間也被稱為POSIX時間。因此在程序中如果時間變量為空、或沒有被正確地初始化,只是簡單地賦一個0值的話,計算結果便會跳到
1970-1-1;這也是現在的所有操作系統上你無法把時間調到1970-1-1之前的原因。
2001-9-9
01:46:40,Unix時間迎來了第一個Billennium(十億禧年),即十進制的1,000,000,000。2005-3-18
01:58:31則是Unix時間的光棍節,1,111,111,111。2033-5-18
3:33:20是第二個Billenniumm,然而第三個則不會毫無障礙的來臨,在那之前,人們先得解決著名的2038年問題。和本世紀初的千年蟲
(Y2K Bug)問題類似,2038年問題(Y2K38
Bug)更隱蔽、更底層、更難解決。計算機內部用來存儲時間的32位二進制數中,最高位被用來表示正負符號,所以它能表示的最大數字是2^31-1,即
2147483647, 對應2038-1-19 03:14:07。到這天的凌晨03:14:08,
Unix時間會溢出并變成十進制的-2147483648,也就是1901-12-13
20:45:52,引起和千年蟲類似的混亂。這將會影響到所有使用這個計時方式的32位系統及其程序語言。要解決這個問題,最簡單的方式是擴展計時的長度
至64位。但愿那時64位系統已成為主流,就可以避免特意去修正這個問題所需要的巨大開銷。沈迦勒/編·圖靈的蘋果
總結
以上是生活随笔為你收集整理的为什么计算机日期最早1970,计算机时间基准——1970.1.1的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 空调控制系统节点服务器,空调的云服务器
- 下一篇: 三丰云服务器