為什麼很多設備的時間還是可以設置成明顯比出廠日期更早的年份,比如1980年甚至更早?

為什麼很多設備的時間還是可以設置成明顯比出廠日期更早的年份?

windows可以設置為1970年,Mac可以設置為1969年,apple watch可以設置為1984年等...


這是UNIX時代留下來的習慣。

UNIX時間是記錄從1970.01.01零時零分零秒(UTC)開始的總秒數,在顯示的時候再將這個秒數換算成具體的日期和時間。

後來的很多系統(比如Windows)都繼承了這種計時方式,但是計時起點並不一定還取在1970.01.01了。

總之這個起點沒什麼特別的意義,只是開發者隨便定的。起點設的那麼早只是一種習慣:「看啊unix是這麼搞的,我們也這麼搞吧。」

順便我在不想透露真實生日的網站上也會把生日設成1970.01.01,請不要相信嗯。


實名反對@周雨桐的答案,毫無幫助的回答

我覺得有以下幾種可能

1、如@acalephs所言,(以下是引用,手機端)

這是UNIX時代留下來的習慣。

UNIX時間是記錄從1970.01.01零時零分零秒(UTC)開始的總秒數,在顯示的時候再將這個秒數換算成具體的日期和時間。

後來的很多系統(比如Windows)都繼承了這種計時方式,但是計時起點並不一定還取在1970.01.01了。

(引用結束)

也就是說,最初的代碼是互相模仿,後來只是簡單的繼承。因為這麼小的不影響使用的細節並么有修改的必要,但是你擅自修改改錯了……還想不想要獎金了?

2、如1中提到的,記錄的時間是一個總秒數。windows、iOS等等都有網路同步時間的功能。同步時間,自然是以伺服器時間為準,伺服器上的時間是一個從1970.01.01零時零分零秒開始的總秒數,那我把自己的初始時間設定為1970.01.01零時零分零秒,再直接加上總秒數換算多方便(而且肯定有現成的代碼可用),要是換個時間(比如2015年1月11日11:11),我還得多寫幾個常量換算一下,出錯可能性大大提高

3、操作系統不是實際物品,不需要打上生產日期。win7開發出來後,今年賣的win7光碟和去年是沒啥區別的。既然如此,去年的win7的初始時間是2014,那今年賣的肯定還是2014……按照這個道理,那初始時間也有可能是2013、2012……

乾脆統一一下,都用1970.01.01零時零分零秒吧。這樣一來,大家寫代碼也不會亂了。

以上


日期時間模塊有現成的代碼庫,為了每個設備的出場日期去改代碼是麻煩而且沒必要的付出。

unix 操作系統選了 1970年做新紀元年(為什麼? 點最後鏈接), 後來很多程序代碼庫也這樣干。吾輩碼農直接用了,即使自己實現也是差不多的思路,就算改變起始時間,那也是代碼的誕生時間,跟硬體無關,為每批硬體去改代碼簡直是吃飽了沒事幹。

周雨桐提到的數值溢出還有個著名的 2000年千禧年的千年蟲問題

中文:java為什麼計算時間從1970年1月1日開始

英文:Unix time


請參見《知乎日報》2014年12月4日的"整點兒新聞"中的《江南Style是怎麼把YouTube的計數器弄壞的》(可在今日的"整點兒新聞"最下方找到"整點兒新聞合集")

提示:可直接拉到"正面回答題主的內容"部分,"重點內容引用"是foreplay

感謝 @zero 的反對,首先聲明,個人不是程序員,也並非對代碼和系統熟悉透徹。此答案只是我曾經看到的,並且認為可以回答題主的問題的,如果錯誤,還請更正,感謝。

再次重申:本人不清楚系統的編寫,只是曾經看到過類似的問題,並認為知乎日報上這篇文章可以回答題主。

本人是非專業人士,有疑問可在樓下專業人士中評論提問

詳細內容請參閱知乎日報相關內容,本答案只做引導,原作者是知乎孫姓攻城師,並非答主。

感謝指正

——————重點內容引用分割線——————

谷歌說我們從來沒有想到有個視頻的觀看量會超過 2,147,483,647,直到 PSY 的《江南 Style》出現……

為什麼超過這個看起來毫無規律的數會讓 YouTube 的計數器出現問題呢?這個數字到底有什麼神秘力量?是親情?是仇恨?下面請收看特別節目《走進大計基》。

(以下科普來自知乎日報後端工程師老孫,有任何錯誤請指出,我們會把老孫趕回花果山。)

我們在頁面上看到一個數字——1。

在伺服器上這個 1 可不是 1 了,而是 1。

頁面上一個看到一個數字——2。

在伺服器可不是 2,也不是 2,而是 10。

如果是 30 呢?伺服器上會存著 11110。

是的,電腦是很笨的,它只認識 0 或者 1。這樣很 2,所以又叫二進位。

這些數據存在哪呢?存在一個計數器里,就像這樣——

?

這是一個有四個位置的計數器,管它叫四位計數器。

假如它是二進位的,那麼能顯示的數值範圍就是 0000-1111,轉換成 10 進位就是 0-15(0 到 2 的 4 次方減 1)。

那我想記錄 16 怎麼辦?不能夠,這個不能夠的學名叫冒漾(數據溢出)。

我們需要換一個更多位的計數器。

電腦上的計數器的大小一般是位元組(Byte)的倍數,一個位元組有 8 位(8 bits,每一 bit 只能顯示 0 或者 1)。

我們取一個位元組來給我們計數,所以我們就擁有了一個八位計數器,終於能記錄 16 了!16 在這個計數器上會顯示為——

00010000

這個計數器最多能記錄到哪呢?11111111,10 進位為 2 的 8 次方減去 1 = 255,超過這個數也會冒漾。

好吧,看來我們只好再用 2 位元組來做計數器,就是 16 位。能記錄到 1111111111111111(二進位)= 65,535(十進位)。

十六位計數器可以記錄這麼大的數字,大家都很開心,攻城師覺得十六位計數器是好的。

不過有個問題,負數怎麼記錄?沒有負號哇。

有一個聰明的攻城師說了,沒關係,那我們就用最高位來表示正負,最高位是 1 這個數就是負的,最高位是 0 這個數就是正的。

01111111 再加 1 就是 10000000,為了便於計算,攻城師把這值定義為最小值,也就是 -128。

於是這個帶正負的 1 位元組八位計數器能記錄的值為 -128 到 127。能記錄的最大數變小了,但我們能記錄負數啦,攻城師又開心了,

「我們再做一個 4 位元組的計數器吧!」「好啊好啊好啊好啊……」

4 位元組是 32 位,能記錄的最大值是——

01111111111111111111111111111111

換算成 10 進位是多少?

2,147,483,647……

攻城師看見這個數字愣了,腦海中浮現出這樣一張臉——

是的,鳥叔的《江南 Style》MV 觀看量超過的就是這麼一個數字。

所以聰明的你現在應該知道了,YouTube 給視頻做計數的計數器是一個帶正負的 4 位元組三十二位計數器。

被鳥叔爆掉了。

—————正面回答題主的部分——————

其實計算機界有很多問題都是由這個看起來很好解決的「冒漾問題」引起的。

比如有很多軟體用來記錄時間的計數器也是帶正負的 4 位元組 32 位計數器,只能記%錄從 1970 年 1 月 1 日之後的 2,147,483,647 秒,也就是到 2038 年 1 月 19 日凌晨 03:14:07。

然後這個數值會跳到最小的負數,然後計算機就瘋了。

你看,你又有一樣新的知識可以拿去泡妹子了。

「你知道 2038 年 1 月 19 日凌晨 03:14:07 是世界末日嗎?」

————————再割————————

日報上寫的是從1970年開始,那麼從1969年開始的mac估計計數末年也會是2037年吧(窮,無MAC)?


或許是有的軟體不支持太晚的時間。


時間方面的服務是操作系統很基礎的一部分,像 mac os 和 linux 都能溯源到 unix,windows 當年也是向 unix 學了不少,這部分的代碼估計也就一直留下來了,為了兼容性,或者就是覺得沒必要,所以沒有變


看這簡訊我還以為我穿越了,聯通時光機,有圖為證!


如果保存的好,就可以給公元11970年的人當萬年曆用了,多麼硬的廣告


「apple watch可以設置為1984年」 你從哪裡搞到的Apple Watch?

Windows可以設置到1980年,Mac OS X可以設置到1969年,iOS可以設置到1970年。原因嘛也很簡單,讓時間只能在出廠日期之後是一件多餘的沒有必要的也很麻煩的一件事。


推薦閱讀:

在安裝了海量字體的情況下,如何在 PS 里快速的翻到自己想要的字體?
「機械設計製造及自動化」的核心課程是哪幾門?最核心的課程是哪1門?
從事景觀設計、建築或城市規劃後,為什麼想轉行?
如何評價日本工業設計師深澤直人的設計作品?
Dribbble 和 Behance 都提供高質量的設計作品,它們之間的主要區別是什麼?

TAG:設計 | 軟體 | 蘋果公司AppleInc | 計算機 |