漫話:為什麼計算機起始時間是1970年1月1日?

  • 时间:
  • 浏览:15
  • 来源:男人橾女人免费网站_日本AV爆乳中文在线_午夜高清播放器--日日夜夜在线免费观看2019
作者:漫話編程 來自:漫話編程問題復現1970-01-01對於開發者來說都是不陌生的,有些系統對於時間的處理如果不夠好的話,就可能把時間顯示成1970-01-01,所以經常有用戶看到1970-01-01這個時間。這種情況其實是很簡單就可以復現的,當我們嘗試使用以下Java代碼定義時間:Date date = new Date(0);System.out.println(date);打印出來的結果:Thu Jan 01 08:00:00 CST 1970通過Date的構造函數的Java Doc說明我們也能得到一些蛛絲馬跡:該構造函數接收用戶指定一個毫秒數,如new Date(1000),表示獲得一個距離"epoch"有1000毫秒的時間。在Java中,這個時間是1970, 00:00:00 GMT。時間戳一切要從Unix操作系統誕生開始說起。1969年8月,貝爾實驗室的程序員肯湯普遜利用妻兒離開一個月的機會,開始著手創造一個全新的革命性的操作系統,他使用B編譯語言在老舊的PDP-7機器上開發出瞭Unix的一個版本。隨後,湯普遜和同事丹尼斯裡奇改進瞭B語言,開發出瞭C語言,重寫瞭Unix,新版於1971年發佈。在Unix被發明出來之後,需要在Unix上表示時間,就需要想辦法定義一個能表示一份數據在某個特定時間之前已經存在的、完整的、可驗證的數據來表示時間。於是,Unix時間戳被定義出來,即通過當前時間和一個"紀元時間"進行對比,其間相差的秒數作為時間戳。為瞭讓Unix時間戳表示時間這種方式用的盡可能久,最初就把Unix誕生的時間1971-1-1定義成"紀元時間"。時間戳修改除瞭開始時間是1971-1-1而不是1970-1-1外,最初的時間戳也不是每增加1秒時間戳就變動一次,而是每1/60秒都會改變一次時間戳。另外,Unix是在1971年發明出來的,當時的計算機系統是32位,如果用32表示有整數,那麼最大值是2147483647(2^31-1)。那麼,簡單做一個數學計算,如果用當時的時間戳計算方式來表示時間的話,Unix時間戳最多可以使用4294967296/(60*60*24)/60 = 828.5天(一天有60*60*24秒,每1/60秒會占用一個時間戳)。想象一下,設計出一個計算機系統,他的時間隻能表示 828.5天,是不是很難讓人接受,但是最初的Unix確實是這樣的。後來,Unix的開發者們也漸漸意識到這樣不是長久之計,於是開始做出改變。最開始,他們將每1/60秒改變一次時間戳修改成每1秒改變一次時間戳。這樣時間戳可以表示的時間就又放大瞭60倍。這時候有828.5*60/365 = 136年。這時候,一方面136年已經足夠久瞭,紀元時間稍微向前調一下影響也不大。另外一方面為瞭方便記憶和使用。於是就把紀元時間從1971-01-01調整到1970-01-01瞭。於是,隨著後面各種開發語言的誕生,就都沿襲瞭1970-1-1這個設定。所以,通常我們說的時間戳,就是指格林威治時間(GMT)1970年01月01日00時00分00秒起至現在的總秒數。紀元時間與時區我們前面所提到的紀元時間的設置,都是基於格林威治標準時間的,即GMT時間。但是世界上各個地區有自己的時區,都需要基於GMT時間進行調整。1970-01-01 08:00:00的顯示顯然是受到瞭時區《如何給女朋友解釋為什麼日本時間比中國快一個小時》的影響,因為中國處於東八區,所以時間會比標準時間早8小時,而標準時間應該是1970-01-01 00:00:00。應該很多人都記得《蘋果"1970 事件"》,在幾年前,一個名為vista980622的網友在國外網站Reddit的論壇上發表瞭一篇“把iPhone時間改成1970年1月1日,手機即可永遠變磚”的帖子。在該帖子發佈不久,很多人都不相信,抱著試試看的態度將手機的時間設置成1970年1月1日,結果手機關機後重新開機真的變磚瞭。因為我們處於東八區,時間比標準時間要快8小時,如果我們把時間調整成1970-01-01 00:00:00,那麼標準時間就會是比這個時間少8小時,即1969年12月31日16時0分0秒。但是,IOS設備是以UTC時區(GMT時間)的1970年1月1日0點0時0秒為界限,數值為0,用戶把時間調整到1969年12月31日16時0分0秒,系統就要出現負值的時間。系統版本為IOS 8.0至IOS 9.3 beta3,並且搭載64位處理器(即處理器為A7-A9X的設備)的蘋果設備都會觸發這個Bug,導致變磚!

猜你喜欢

示威活动蔓延全美33城,多城实施宵禁!

文章选自:人民网连日来,美国警察暴力执法致非洲裔男子死亡一事引发的示威活动持续升级,蔓延至美国多地。直至当地时间30日晚间,白宫外依旧有大量抗议者与全副武装的警察对峙。目前,美

2020-06-01

内蒙古大兴安岭林区毕力格林场森林火灾全部扑灭

据央视新闻客户端消息,5月30日15时,内蒙古大兴安岭林管局库都尔林业局毕力格林场发生森林火灾。火灾发生后,当地迅速调集人员展开灭火。经过扑火队伍连夜奋战,今天(5月31日)上

2020-06-01

4340亿美元!美国亿万富豪疫情期间财富激增,贝佐斯和扎克伯格财富增长最多

每经编辑:张杨运据环球网援引加拿大“环球新闻”21日报道,在美国实施疫情封锁的两个月里,美国亿万富翁们的财富增加约4340亿美元(30873.9亿人民币),增幅近15%。加拿大

2020-05-31

孩子进城里上学长大了会不会不爱家乡了?毕业还能回乡下工作吗?

家乡肯定爱的,毕业应该不会回去工作,不过老的时候有可能会叶落归根的。现在的孩子都让他走出去,在农村在家里没有出息的,“穷”字上面是个“穴”就说明在家里不出去就是出力,出力一般都

2020-05-31

美警卫队巡逻时向民宅发射油漆弹 大喊“给他们点颜色”(图)

来源:海外网【海外网5月31日编译报道】美国警察暴力执法致黑人死亡事件引发的抗议活动已经蔓延全美30多个城市,目前已有16个州25座城市实施宵禁措施。今日俄罗斯电视台31日发布

2020-05-31