使用日期(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