为什么1970年1月1日是“纪元时代”?

时间:2009-07-07 07:40:29

标签: unix time epoch

为什么

  

1970年1月1日00:00:00

考虑纪元时间

5 个答案:

答案 0 :(得分:402)

早期版本的unix以1/60秒的间隔测量系统时间。这意味着32位无符号整数只能表示小于829天的时间跨度。因此,必须在最近的过去设置由数字0(称为纪元)表示的时间。由于这是在20世纪70年代早期,这个时代被设定为1971-1-1。

后来,系统时间被改为每秒递增,这增加了可以用32位无符号整数表示的时间跨度到136年左右。因为将每一秒挤出柜台已经不再那么重要了,所以时代逐渐缩小到最近的十年,从而成为1970-1-1。人们必须假设这被认为比1971-1-1更整洁。

请注意,使用1970-1-1作为其纪元的32位签名整数可以表示最多2038-1-19的日期,该日期将包围到1901-12- 13。

答案 1 :(得分:48)

History

  

最早的Unix时代版本了   在a处递增的32位整数   速率为60赫兹,这是率   硬件上的系统时钟   早期的Unix系统。值60   Hz仍出现在某些软件中   接口因此而来。这个时代也是如此   与当前值不同。的 的   第一版 Unix程序员手册   1971年11月3日定义了   Unix时间为“00:00:00以来的时间,   1971年1月1日,六十分之一   第二个“。

答案 2 :(得分:8)

http://en.wikipedia.org/wiki/Unix_time#History解释了一下Unix时间和所选时代的起源。 unix时间和纪元日期的定义在稳定现在的情况之前经历了一些变化。

但它没有说明为什么最终选择了1970年1月1日。

来自维基百科页面的着名摘录:

  

1971年11月3日的第一版 Unix程序员手册将Unix时间定义为“从1月1日00:00:00开始的时间, 1971 ,测量六十分之一秒。“

     

由于[范围]有限,在将速率更改为1 Hz并将纪元设置为其当前值之前,时间重新定义了多次

     

几个后来的问题,包括当前定义的复杂性,是因为Unix时间已逐渐被使用定义而不是完全定义为开始。

答案 3 :(得分:1)

计划参考日期

epoch reference date是时间线上我们要计算时间的一点。该点之前的时刻记为负数,之后的时刻记为正数。

正在使用许多时代

  

为什么将1970年1月1日00:00:00视为纪元时间?

不,不是时代,是一个时代。 正在使用许多时代

这个时代的选择是任意的

主要计算机系统和库使用至少couple dozen various epochs中的任何一个。使用您提到的1970 UTC时刻,最流行的纪元之一通常称为Unix Time

虽然流行,但Unix Time的1970年可能不是。另外,最常见的运行是1900年1月0日,用于无数的Microsoft Excel和Lotus 1-2-3电子表格,或者2001年1月1日,Apple的Cocoa框架在全球超过十亿的iOS / macOS计算机中使用了无数应用。还是GPS设备使用过1980年1月6日的内容?

许多粒度

不同的系统在计数时间上使用不同的粒度。

即使所谓的“ Unix时间”也有所不同,有些系统将整个seconds计算在内,有些系统将milliseconds计算在内。许多数据库,例如Postgres,都使用microseconds。其中一些(例如Java 8及更高版本中的现代 java.time 框架)使用nanoseconds。有些使用其他粒度。

ISO 8601

由于纪元参考的使用和粒度存在很大差异,因此通常最好避免将矩数作为纪元计数来传达。在时代和粒度的模棱两可之间,再加上人类无法感知有意义的值(因此错过了错误值),请使用纯文本而不是数字。

ISO 8601标准提供了一组广泛的,实用的,设计良好的格式,用于将日期时间值表示为文本。这些格式易于通过机器解析,也易于人类跨文化阅读。

其中包括:

答案 4 :(得分:-11)

简答:为什么不呢?

更长的回答:时间本身并不重要,只要使用它的每个人都同意它的价值。由于1/1/70已经使用了很长时间,因此使用它将使尽可能多的人尽可能理解代码。

选择任意时代只是为了与众不同,没有什么好处。