为什么日期是从1970年1月1日算起的?

时间:2010-03-28 16:18:46

标签: java python programming-languages

使用日期(1970年1月1日)作为时间操纵的默认标准是否有任何理由?我在Java和Python中都看到过这个标准。我知道这两种语言。还有其他流行语言遵循相同的标准吗?

请描述一下。

7 个答案:

答案 0 :(得分:49)

这是Unix time.

的标准
  

Unix时间或POSIX时间是用于描述时间点的系统,定义为自1970年1月1日午夜无效协调世界时(UTC)以来经过的秒数,不计算闰秒。

答案 1 :(得分:44)

  

使用日期(1970年1月1日)作为默认标准

该课题有两个错误的假设:

  • 计算中的所有时间跟踪都是从1970年开始计算的。
  • 此类跟踪是标准的。

二十个时代

计算时间从1970年初开始并不总是跟踪UTC。虽然epoch很受欢迎,但几十年来各种计算环境至少使用two dozen epochs。有些来自其他世纪。它们的范围从0年(零)到2001年。

以下是一些。

  

1月0日,公元前1年

     

1月1日,公元1年

     

1582年10月15日

     

1601年1月1日

     

1840年12月31日

     

1858年11月17日

     

1899年12月30日

     

1899年12月31日

     

1900年1月1日

     

1904年1月1日

     

1967年12月31日

     

1980年1月1日

     

1980年1月6日

     

2000年1月1日

     

2001年1月1日

Unix Epoch Common,但不是主导

1970年初开始流行,可能是因为Unix使用它。但绝不是占主导地位。例如:

  • 无数百万(数十亿?)的Microsoft Excel& Lotus 1-2-3文档使用January 0, 1900(1899年12月31日)。
  • 世界现在over a billion iOS/OS X devices使用1 January 2001, GMT的{​​{3}}。
  • Cocoa (NSDate) epoch卫星导航系统使用January 6, 1980,而欧洲替代GPS使用22 August 1999

ISO 8601

假设count-since-epoch正在使用Unix时代,那就是为bug打开了一个很大的漏洞。这样的计数对于人类来说不可能立即解密,因此在调试和记录时不会轻易地标记错误或问题。另一个问题是下面解释的粒度模糊性。

我强烈建议将日期时间值序列化为数据交换的明确Galileo字符串,而不是整数count-since-epoch:YYYY-MM-DDTHH:MM:SS.SSSZ,例如2014-10-14T16:32:41.018Z

什么自Epoch

以来的数量

count-since-epoch时间跟踪的另一个问题是时间单位,通常使用至少四个分辨率级别。

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

答案 2 :(得分:5)

1970年1月1日00:00:00 am是POSIX time的零点。

答案 3 :(得分:4)

  

使用日期(1970年1月1日)作为时间操纵的标准是否有任何理由?

没有理由这么重要。

Python的time模块 C库。问肯汤普森为什么选择这个日期作为划时代的日期。也许这是某人的生日。

Excel使用两个不同的时期。为什么不同版本的Excel使用不同的日期有什么原因?

除了实际的程序员,没有人会知道为什么做出那些决定。

和...

为什么选择日期并不重要。它只是。

天文学家使用他们自己的划时代日期:http://en.wikipedia.org/wiki/Epoch_(astronomy)

为什么呢?必须选择日期才能使数学运算出来。任何随机日期都可以。

过去的日期避免了一般情况下的负数。

一些更聪明的套餐使用了公历1年。第1年的原因是什么? 像“日历计算”这样的书中有一个理由:它在数学上稍微简单一些。

但是如果你考虑一下,1/1/1和1/1/1970之间的差异只是1969年,这是一个微不足道的数学偏移。

答案 4 :(得分:2)

Q)“为什么日期是从1970年1月1日开始计算的?”

A)它必须尽可能新,但包括一些过去。 很可能没有其他明显的原因,因为很多人都有同样的感受。

他们知道,如果他们把它放在过去太远的地方就会产生问题,并且如果将来它们知道它会产生负面结果。过去没有必要更深入,因为事件最有可能发生在未来。

备注: 另一方面,玛雅人需要把事件放到过去,因为他们已经掌握了很多过去的知识,为此他们制作了一个长期的日历。只是将所有常规现象放在压延机上。

时间戳不是日历,而是时间戳。而且我相信玛雅人使用同样的观点制作了他们的长期日历。 (意思是他们知道他们与过去没有任何关系,他们只是需要更大规模地看到它)

答案 5 :(得分:2)

为什么它总是1970年1月1日,因为 - '1970年1月1日'通常称为“纪元日期”是Unix计算机开始运行的时间,并且时间戳标记为“0”。自该日期起的任何时间都是根据经过的秒数计算的。简单来说......任何日期的时间戳都将是该日期与'1970年1月1日'之间的秒数差异时间戳只是一个整数,从1970年1月1日午夜的数字'0'开始并继续增加每秒传递'1'将UNIX时间戳转换为可读日期PHP和其他开源语言提供内置函数。

答案 6 :(得分:0)

是的,C(和它的家人)。这也是Java所采用的。