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

rah*_*hul 441 unix time epoch

为什么是

1970年1月1日00:00:00

考虑了纪元时间

Mat*_*lls 407

早期版本的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.

  • 它是当时使用的系统板上的一个振荡器的频率.振荡器没有必要是60Hz,因为它在DC上运行,但是使用当时最常见的东西可能很便宜,而电视正在批量生产...... (54认同)
  • 1/60是否与美国电网的频率有关? (28认同)
  • 实际上,当时,计算机时钟和RTC与美国电源波形同步是很常见的,因为它(非常)可靠.它被乘以获得处理器时钟,并被分成几秒来获得RTC. (18认同)
  • @JediKnight这是基于我自己作为开发人员的经验的推测:更改标准需要时间,如果您的更改没有成功,那么您最终会遇到[竞争标准](http://xkcd.com/927/) .对纪元问题的真正解决方案是64位整数,而不是及时向前移动时代. (18认同)
  • @mafioso:是的,我会在2038 -... 1901-12-13的笔记本电脑上设置提醒. (9认同)
  • @MattHowells - 他们为什么不将这个时代升级到2000年? (5认同)
  • 我期待在不久的将来,地球人会相信宇宙是在1970年1月1日00:00:00创建的. (2认同)
  • `> ...一个32位有符号整数...将回绕到1901-12-13."`我错过了什么,这不是整数溢出,因此技术上未定义(或更实际,平台依赖)?[ 2038年维基百科上的问题与@MattHowells同意](https://en.wikipedia.org/wiki/Year_2038_problem)`>超出此范围的时间将"环绕"并在内部存储为负数,这些系统将解释为发生在1901年12月13日而不是2038年1月19日.想法? (2认同)
  • @亚历克西奥斯。这**完全不是真的**。计算机历史上从未使用过 60hz 交流电源频率作为时钟源。石英晶体振荡器是自 1930 年以来第一款精密时钟,其参考石英晶体由于压电效应而产生的固有频率:32768 Hz。西屋工程师(1891 年),无论有没有特斯拉,都选择 60Hz(1891 年)(和 30Hz,1893 年)作为交流频率的最佳选择,其中欧洲选择 41.66Hz(通用电气,1893 年)和 50Hz(AEG,柏林) ,1891)。 (2认同)

Stu*_*son 49

历史.

最早版本的Unix时间有一个32位整数,以60 Hz的速率递增,这是早期Unix系统硬件上系统时钟的速率.因此,某些软件界面中仍会显示60 Hz的值.这个时代也与现在的价值不同.1971年11月3日的第一版 Unix程序员手册将Unix时间定义为"自1971年1月1日00:00:00以来,以六十分之一秒为单位测量的时间".

  • @Steve:从历史上看,他是对的,你错了.;-) (78认同)
  • @SteveHarrison 是的,但一开始并不是这样的 (3认同)
  • 纪元时间是 1970 年 1 月 1 日,而不是 1971 年 1 月 1 日。 (2认同)

Daw*_*uss 9

http://en.wikipedia.org/wiki/Unix_time#History解释了一下Unix时间和所选时代的起源.unix时间和纪元日期的定义经历了一些变化,然后才稳定现在的状态.

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

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

第一版本的Unix程序员手册日1971年11月3日的Unix时间定义为"由于00:00:00的时间,1年1月,1971年,在第二的六十分测量".

由于[有限范围] ,在将速率改变为1Hz并且将纪元设定为其当前值之前,不止一次地重新定义了纪元.

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


Bas*_*que 7

纪元参考日期

一个划时代的参考日期是从我们统计的时间在时间轴上的一个点。该点之前的时刻以负数计算,之后的时刻以正数计算。

许多时代在使用

为什么 1970 年 1 月 1 日 00:00:00 被认为是纪元时间?

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

这种时代的选择是任意的

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

虽然很受欢迎,但 Unix Time 的 1970 可能不是常见的。最常见的还有 1900 年 1 月 0 日,无数 Microsoft Excel 和 Lotus 1-2-3 电子表格,或 2001 年 1 月 1 日,Apple 的 Cocoa 框架在全球超过 10 亿台 iOS/macOS 机器中的无数应用程序中使用。或者也许是GPS设备使用的 1980 年 1 月 6 日?

多粒度

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

甚至所谓的“Unix 时间”也各不相同,有些系统计算整,有些系统计算毫秒。许多数据库如 Postgres 使用微秒。有些人,如现代java.time在Java中8框架和后,利用纳秒。有些还使用其他粒度。

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