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

问题描述 投票:61回答:7

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

请描述一下。

java python programming-languages
7个回答
49
投票

这是Unix time.的标准

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


48
投票

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

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

  • 计算中的所有时间跟踪都是自1970年以来的计数。
  • 这种跟踪是标准的。

Two Dozen Epochs

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

这里有几个。

公元前1月0日

公元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, But Not Dominant

1970年初很受欢迎,可能是因为Unix使用它。但绝不是占主导地位。例如:

  • 数以百万计(数十亿?)的Microsoft Excel和Lotus 1-2-3文档使用January 0, 1900(1899年12月31日)。
  • 现在世界上有使用over a billion iOS/OS X devicesCocoa (NSDate) epoch1 January 2001, GMT
  • GPS卫星导航系统使用January 6, 1980,而欧洲替代Galileo使用22 August 1999

ISO 8601

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

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

Count Of What Since Epoch

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


5
投票

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


4
投票

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

没有理由重要。

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

Excel使用两个不同的时期。任何不同版本的Excel使用不同日期的原因是什么?

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

和...

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

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

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

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

一些更聪明的套餐使用了预感格里高利年1.第一年的任何理由? 像Calendrical Calculations这样的书中有一个理由:它在数学上稍微简单一些。

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


3
投票

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


2
投票

Q)“为什么日期是从1970年1月1日算起来的?”

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

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

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

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.