使用日期(1970年1月1日)作爲時間操作的默認標準是否有任何理由?我已經在Java和Python中看到過這個標準。我知道這兩種語言。還有其他流行的語言是否遵循相同的標準?爲什麼從1970年1月1日起計算日期?
請說明。
使用日期(1970年1月1日)作爲時間操作的默認標準是否有任何理由?我已經在Java和Python中看到過這個標準。我知道這兩種語言。還有其他流行的語言是否遵循相同的標準?爲什麼從1970年1月1日起計算日期?
請說明。
Unix時間的標準,或POSIX時間,是用於在時間來描述點的系統,定義爲自1午夜proleptic協調世界時(UTC)經過的秒數1970年1月,不算閏秒。
是的,C(及其家族)。這也是Java採用它的地方。
感謝您指點。但爲什麼? – 2010-03-28 16:22:08
1970年1月1日00:00:00是POSIX time的零點。
使用日期(1970年1月1日)作爲時間操縱的標準有什麼理由嗎?
沒有理由。
Python的time
模塊是的C庫。問肯·湯普森他爲什麼選擇這個日期來創造一個劃時代的日子。也許這是某人的生日。
Excel使用兩個不同的時代。任何不同版本的Excel使用不同日期的原因?
除了實際的程序員,其他人都不知道爲什麼這些決定是由那些決定。
而且......
爲什麼選擇的日期不要緊。它就是這樣。
天文學家利用自己的具有劃時代意義的日期:http://en.wikipedia.org/wiki/Epoch_(astronomy)
爲什麼?必須選擇一個日期才能使數學計算出來。任何隨機日期都可以使用。
以往的日期避免了一般情況下的負數。
一些更聰明的軟件包使用了格雷戈裏年的第一年。任何第一年的理由?
在Calendrical Calculations等書籍中給出了一個原因:它在數學上稍微簡單一些。
但是,如果你仔細想一想,1/1/1和1/1/1970之間的差異僅僅是1969年,這是一個微不足道的數學抵消。
如果選擇了1/1/1,我們現在已經用完了秒數(2^31)。就目前而言,我們在2038年面對32位操作系統的Y2K問題。 http://en.wikipedia.org/wiki/Year_2038_problem – 2010-03-29 04:17:40
@克里斯納瓦:使用1/1/1天數的人,而不是秒。 20億天約爲500萬年。通常他們保留一個(日,時間)對以最大化時間分辨率;大多數日子只有86400秒。 – 2010-03-29 10:05:43
@ S.Lott:是的。我只是指出,由於大多數軟件在這個時代以秒爲單位(而非分鐘),因此1/1/1遠遠超過了合理的開始日期。因此,選擇了更近的日期作爲計算機時代(並且通過聯想開始了IT革命.-) – 2010-03-29 14:15:58
Q)「爲什麼從1970年1月1日起計算日期?」
A)它必須儘可能近,但包括一些過去。 很可能沒有其他重要的原因,因爲很多人都有同樣的感受。
他們知道如果把它放在過去太過分了,並且他們知道如果它將來會帶來負面結果,它就會出現問題。過去沒有必要更深入,因爲事件很可能在未來發生。
注: 瑪雅人,在另一方面,有需要的地方事件成爲過去,因爲有很多過去的,爲此,他們做了一個長期壓光機的知識。只是將所有常規現象放在日曆上。
時間戳不是一個日曆,它是一個時代。我相信瑪雅人用同樣的觀點製作了他們的長期日曆。 (這意味着他們知道他們與過去沒有任何關係,他們只是需要看到它在更大的規模)
爲什麼它始終第一1970年,因爲 - '1970年1月1日'通常被稱爲因爲「紀元日期」是Unix計算機啓動時間的日期,並且該時間戳被標記爲「0」。自該日期以來的任何時間都是基於經過的秒數來計算的。用簡單的話來說......任何日期的時間戳將在該日期和'1970年1月1日'之間以秒爲單位的時間戳。時間戳記只是一個從1970年1月1日午夜的數字'0'開始的整數,並且繼續遞增每次第二次通過'1'將UNIX時間戳轉換爲可讀日期PHP和其他開源語言提供了內置函數。
的問題提出了兩個錯誤的假設:
時間計算是並不總是從1970年UTC開始跟蹤。雖然這個epoch很受歡迎,但幾十年來的各種計算環境至少使用了近two dozen epochs。有些來自其他世紀。它們的範圍從年0(零)到2001年
1970年開始流行,可能是由Unix其使用感覺。但絕不佔主導地位。例如:
January 0, 1900
(1899年12月31日)。1 January 2001, GMT
。January 6, 1980
而歐洲替代Galileo使用22 August 1999
。假設計數紀元以來使用的Unix時代是開放的錯誤一大漏洞。這樣的計數對於人類來說是不可能立即破譯的,因此在調試和記錄時不容易標記錯誤或問題。另一個問題是下面解釋的粒度的模糊性。
我強烈建議,而不是序列化日期時間值作爲明確的ISO 8601字符串數據交換,而不是一個整數計算紀元以來的:YYYY-MM-DDTHH:MM:SS.SSSZ
如2014-10-14T16:32:41.018Z
。
與計數紀元以來的時間跟蹤的另一個問題是時間單位,與常用至少四個級別的分辨率。
遵循同樣的標準另一種流行的語言中使用由新java.time package是PHP,它的一個相當普遍的時間起點。 – 2010-03-28 16:37:20