2010-03-28 163 views
38

使用日期(1970年1月1日)作爲時間操作的默認標準是否有任何理由?我已經在Java和Python中看到過這個標準。我知道這兩種語言。還有其他流行的語言是否遵循相同的標準?爲什麼從1970年1月1日起計算日期?

請說明。

+0

遵循同樣的標準另一種流行的語言中使用由新java.time package是PHP,它的一個相當普遍的時間起點。 – 2010-03-28 16:37:20

回答

39

它是Unix time.

Unix時間的標準,或POSIX時間,是用於在時間來描述點的系統,定義爲自1午夜proleptic協調世界時(UTC)經過的秒數1970年1月,不算閏秒。

+3

你知道Kernighan和Thompson是否每個人都表達了選擇那個時刻之外的理由:「在我們開始建造這個東西之前,這是一個圓整的數字。」? – dmckee 2010-03-28 17:03:38

+0

這是一年的開始,它在零時區(祖魯)。這兩個都使日期格式代碼更簡單。 – 2010-03-28 17:48:14

+14

不計算閏秒?我不知道那個細節。想了一會兒,我明白了爲什麼你會那樣做,但是男人。我的世界被粉碎了。由24秒。 – keturn 2010-03-28 19:08:44

0

是的,C(及其家族)。這也是Java採用它的地方。

+1

感謝您指點。但爲什麼? – 2010-03-28 16:22:08

5

使用日期(1970年1月1日)作爲時間操縱的標準有什麼理由嗎?

沒有理由。

Python的time模塊的C庫。問肯·湯普森他爲什麼選擇這個日期來創造一個劃時代的日子。也許這是某人的生日。

Excel使用兩個不同的時代。任何不同版本的Excel使用不同日期的原因?

除了實際的程序員,其他人都不知道爲什麼這些決定是由那些決定。

而且......

爲什麼選擇的日期不要緊。它就是這樣。

天文學家利用自己的具有劃時代意義的日期:http://en.wikipedia.org/wiki/Epoch_(astronomy)

爲什麼?必須選擇一個日期才能使數學計算出來。任何隨機日期都可以使用。

以往的日期避免了一般情況下的負數。

一些更聰明的軟件包使用了格雷戈裏年的第一年。任何第一年的理由?
在Calendrical Calculations等書籍中給出了一個原因:它在數學上稍微簡單一些。

但是,如果你仔細想一想,1/1/1和1/1/1970之間的差異僅僅是1969年,這是一個微不足道的數學抵消。

+0

如果選擇了1/1/1,我們現在已經用完了秒數(2^31)。就目前而言,我們在2038年面對32位操作系統的Y2K問題。 http://en.wikipedia.org/wiki/Year_2038_problem – 2010-03-29 04:17:40

+0

@克里斯納瓦:使用1/1/1天數的人,而不是秒。 20億天約爲500萬年。通常他們保留一個(日,時間)對以最大化時間分辨率;大多數日子只有86400秒。 – 2010-03-29 10:05:43

+0

@ S.Lott:是的。我只是指出,由於大多數軟件在這個時代以秒爲單位(而非分鐘),因此1/1/1遠遠超過了合理的開始日期。因此,選擇了更近的日期作爲計算機時代(並且通過聯想開始了IT革命.-) – 2010-03-29 14:15:58

2

Q)「爲什麼從1970年1月1日起計算日期?」

A)它必須儘可能近,但包括一些過去。 很可能沒有其他重要的原因,因爲很多人都有同樣的感受。

他們知道如果把它放在過去太過分了,並且他們知道如果它將來會帶來負面結果,它就會出現問題。過去沒有必要更深入,因爲事件很可能在未來發生。

注: 瑪雅人,在另一方面,有需要的地方事件成爲過去,因爲有很多過去的,爲此,他們做了一個長期壓光機的知識。只是將所有常規現象放在日曆上。

時間戳不是一個日曆,它是一個時代。我相信瑪雅人用同樣的觀點製作了他們的長期日曆。 (這意味着他們知道他們與過去沒有任何關係,他們只是需要看到它在更大的規模)

2

爲什麼它始終第一1970年,因爲 - '1970年1月1日'通常被稱爲因爲「紀元日期」是Unix計算機啓動時間的日期,並且該時間戳被標記爲「0」。自該日期以來的任何時間都是基於經過的秒數來計算的。用簡單的話來說......任何日期的時間戳將在該日期和'1970年1月1日'之間以秒爲單位的時間戳。時間戳記只是一個從1970年1月1日午夜的數字'0'開始的整數,並且繼續遞增每次第二次通過'1'將UNIX時間戳轉換爲可讀日期PHP和其他開源語言提供了內置函數。

23

的問題提出了兩個錯誤的假設:

  • 所有的計算時間跟蹤的計數,因爲,1970年完成。
  • 這種跟蹤是標準的。

二十二曆元

時間計算是並不總是從1970年UTC開始跟蹤。雖然這個epoch很受歡迎,但幾十年來的各種計算環境至少使用了近two dozen epochs。有些來自其他世紀。它們的範圍從年0(零)到2001年

Unix的時代常見的,但不佔優勢

1970年開始流行,可能是由Unix其使用感覺。但絕不佔主導地位。例如:

  • 數百萬的Microsoft Excel中(10億?)&的Lotus 1-2-3文件使用January 0, 1900(1899年12月31日)。
  • 現在世界上有over a billion iOS/OS X devices使用的1 January 2001, GMT
  • GPS衛星導航系統使用January 6, 1980而歐洲替代Galileo使用22 August 1999

ISO 8601

假設計數紀元以來使用的Unix時代是開放的錯誤一大漏洞。這樣的計數對於人類來說是不可能立即破譯的,因此在調試和記錄時不容易標記錯誤或問題。另一個問題是下面解釋的粒度的模糊性。

我強烈建議,而不是序列化日期時間值作爲明確的ISO 8601字符串數據交換,而不是一個整數計算紀元以來的:YYYY-MM-DDTHH:MM:SS.SSSZ2014-10-14T16:32:41.018Z

計數什麼自紀元

與計數紀元以來的時間跟蹤的另一個問題是時間單位,與常用至少四個級別的分辨率。


  • 原來的Unix工具使用的全秒,導致Year 2038 Problem自1970年以來,當我們到達秒的限制,如果存儲爲32位整數。
  • ​​
    由較舊的Java庫(包括捆綁的java.util.Date類和Joda-Time庫)使用。
  • Microseconds
    由數據庫使用,如Postgres
  • Nanoseconds
    在Java中8

Diagram showing different software counting from epoch by seconds, milliseconds, microseconds, or nanoseconds.

相關問題