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

Why is 1/1/1970 the “epoch time”?

为什么是

1 January 1970 00:00:00

考虑了时代?


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

后来,系统时间被更改为每秒钟递增,从而将32位无符号整数表示的时间跨度增加到大约136年。由于挤出每秒钟的时间不再那么重要,这个时代被四舍五入到最近的十年,因此变成了1970-1-1。我们必须假设这被认为比1971-1-1更整洁。

请注意,使用1970-1-1作为其历元的32位有符号整数可以表示到2038-1-19的日期,在该日期它将环绕到1901-12-13。


历史。

The earliest versions of Unix time had
a 32-bit integer incrementing at a
rate of 60 Hz, which was the rate of
the system clock on the hardware of
the early Unix systems. The value 60
Hz still appears in some software
interfaces as a result. The epoch also
differed from the current value. The
first edition Unix Programmer's Manual
dated November 3, 1971 defines the
Unix time as"the time since 00:00:00,
Jan. 1, 1971, measured in sixtieths of
a second".


http://en.wikipedia.org/wiki/unix-time history解释了一些关于unix时间和所选时代的起源。Unix时间和纪元日期的定义在稳定其现状之前经历了一些变化。

但这并不能说明为什么最终选择了1/1/1970。

维基百科页面的重要摘录:

The first edition Unix Programmer's Manual dated November 3, 1971 defines the Unix time as"the time since 00:00:00, Jan. 1, 1971, measured in sixtieths of a second".

Because of [the] limited range, the epoch was redefined more than once, before the rate was changed to 1 Hz and the epoch was set to its present value.

Several later problems, including the complexity of the present definition, result from Unix time having been defined gradually by usage rather than fully defined to start with.


纪元参考日期

纪元参考日期是时间线上我们计算时间的点。在此点之前的时刻用负数计数,之后的时刻用正数计数。

很多时代都在使用

Why is 1 January 1970 00:00:00 considered the epoch time?

不,不是时代,是时代。有许多时代在使用。

这个时代的选择是任意的。

主要的计算机系统和图书馆使用至少几十个不同时代中的任何一个。其中一个最流行的时代通常被称为Unix时间,使用您提到的1970年UTC时刻。

虽然很流行,但unix-time的1970可能不是最常见的。同样,最常见的例子是1900年1月0日的无数Microsoft Excel&Lotus 1-2-3电子表格,或者2001年1月1日的苹果Cocoa框架在全球数十亿台iOS/MacOS机器上的无数应用程序中使用。或者可能是1980年1月6日被GPS设备使用?

许多颗粒

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

甚至所谓的"unix时间"也会有所不同,有些系统会计算整秒数,有些则计算毫秒数。许多数据库(如Postgres)使用微秒。一些,比如Java 8和以后的现代JavaTimeFrand,使用纳秒。有些还使用其他粒度。

ISO 8601标准

因为在使用一个时代参考和粒度上有很大的差异,所以一般最好避免将时间作为一个时代的计数来传递。在不明确的时代和粒度之间,加上人类无法感知有意义的值(因此错过了错误的值),使用纯文本而不是数字。

ISO 8601标准提供了一套实用的、精心设计的格式,用于将日期时间值表示为文本。这些格式很容易被机器解析,也容易被跨文化的人类阅读。

其中包括:

  • 仅限日期:2019-01-23
  • UTC时刻:2019-01-23T12:34:56.123456Z
  • 偏离UTC的力矩:2019-01-23T18:04:56.123456+05:30
  • 以周为单位的年份:2019-W23
  • 序日(1日至366日):2019-234

简短回答:为什么不呢?

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

选择一个任意的时代只是为了与众不同没有什么大的价值。