為什麼絕大多數電子產品的時間設定都只能調到1970年?

很好奇,即使是最新上市的電子產品,時間也可以設置到1970年

然而基本上絕大多數的電子產品,都只能設置到1970年1月1日,為什麼不能再往前?或者說,有什麼必要讓產品的時間設置到40年前(比如iPhone)?是什麼因素規定的電子產品的時間只能在1970年之後?


歷史原因。

32位整數只能表示1901年到2038年的範圍,這個數為最小的值(負數)是在1901年,為零的時候正好是1970年,某些應用不讓它為負,所以就只能是1970到2038年,如果超過2038會穿越回1901年。

64位時間才能表示更大的範圍,但大量的程序依賴那個32位的時間整數,要改動起來恐怕工作量很大。

請祈禱所有用 32 位表示時間的程序在 2038 年之前都得到了升級維護吧,不然,boom。。。


純粹是歷史問題。

當前4個回答歷史上有點小偏差,並且他們沒綜合起來,所以我綜合一下順便修正歷史。

Unix時間(或者叫「POSIX時間」)定義時間爲從UTC 1970-01-01 00:00:00過去的秒數。POSIX如其名稱(可移植操作系統介面)所示,是一套「標準」,並且是許多操作系統都遵循的規範(這樣可以很容易使用標準C庫)。

由於大量工具都是這麼弄的(包括庫),所以新的電子設備沒必要專門去顛覆這個設計(爲了省事),於是沿用下來了。

由於這個設計以及32位系統中整型(比如C的int)是32位,而標準中用的也是int,所以會導致當這32位(實際上是31位因爲使用的是有符號的int而非無符號uint)窮盡時(也就是2147483647秒後,即2038-01-19 03:14:07),使用該設計的32位系統中時間將出現混亂(不理解後果的可以參考「千年蟲危機」或者叫「千禧危機」【說實話我覺得臺灣這個翻譯比較好聽】)。

即使不是32位系統,依賴該表示的32位程序也會出問題。

事實上據說Unix最初設計的是1971-01-01 00:00:00過去的frac{1}{60}秒數。後來人們覺得不對勁、這個範圍太小,於是改成了從1970-01-01 00:00:00起的數。再後來就進了POSIX。(參見 https://en.wikipedia.org/wiki/Unix_time )


unix時間戳是從1970年1月1日開始所經過的秒數。


這是當年那群搞Unix的人遺留下來的問題。

開始時間是1970年1月1日只是因為他們當時這麼設定而已,然後以這個時間為起點加上秒數來表示目標時間。

如果這套時間表示方式早個10年制定,或許起始時間就會變成1960年了。

現在的大多是的時間表示都是用的這一套方式。


大部分電子產品的系統的祖宗都是unix。

unix誕生在1970年,時間計算從1970年開始。


推薦閱讀:

為什麼現在的操作系統基本上用C語言來實現?
不同編程語言之間是如何溝通的?
Windows自帶的微軟拼音輸入法為什麼會佔用巨大的內存?
學習 Linux 有哪些好處?
一個已經裝好系統的硬碟能否移到其他未裝系統的電腦上直接使用?

TAG:操作系統 | 編程 | 計算機 | 電子產品 |