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


455

为什么是

1970年1月1日00:00:00

考虑到时代了


21
不知道为什么有人认为这是主观的。“ Epoch”时间是标准的时间戳方案。
ConcernedOfTunbridgeWells,2009年

5
今天是380,000小时前
mplungjan

21
我们应该从这个日期开始计时,所以我们现在是44
。– Leonardo Raele 2014年

3
今天,现在是1499969999!它只是大约。8个小时!
Beco博士

1
@LeonardoRaele是的!举例来说,第二次世界大战于公元31年开始!
锡阿瓦什·莫尔塔扎维

Answers:


417

Unix的早期版本以1/60 s的间隔测量系统时间。这意味着32位无符号整数只能表示少于829天的时间范围。因此,必须在最近的时间中设置以数字表示的时间0(称为epoch)。1970年代初期,时代定为1971-1-1。

后来,系统时间更改为每秒增加一次,这将可以由32位无符号整数表示的时间跨度增加到大约136年。由于将秒数挤出柜台不再那么重要,因此时代被舍入到最接近的十年,从而成为1970-1-1。必须假定这被认为比1971-1-1更加整洁。

请注意,以1970-1-1为纪元的32位有符号整数可以表示直到2038-1-19的日期,在该日期它将回绕到1901-12-13。


30
1/60与美国电网的频率有关系吗?
xtofl,2009年

55
它是当时使用的系统板上的振荡器之一的频率。由于振荡器可以在DC上运行,因此不必将其设为60Hz,但是使用当时最常见的振荡器可能会很便宜,并且那时电视已开始量产……
Matt Howells

18
实际上,当时,计算机时钟以及RTC与美国市电波形同步非常普遍,因为它非常可靠。它乘以得到处理器时钟,再除以得到RTC的秒数。
Alexios 2012年

11
@mafioso:好的,我会在笔记本电脑上设置2038 -... 1901-12-13的提醒。

18
@JediKnight这是基于我自己作为开发人员的经验进行的推测:更改标准需要时间,如果变更没有被搁置,那么您最终将获得竞争标准。解决时代问题的真正方法是使用64位整数,而不是将时代向前推进。
2015年

51

历史

Unix时间的最早版本具有32位整数,以60 Hz的速率递增,这是早期Unix系统的硬件上的系统时钟速率。结果,某些软件界面中仍显示60 Hz。纪元也不同于当前值。1971年11月3日发行的第一版 Unix程序员手册将Unix时间定义为“自1971年1月1日00:00:00起的时间,以六十分之一秒为单位”。


1
时代是1970年1月1日,而不是1971
史蒂夫·哈里森

10

http://en.wikipedia.org/wiki/Unix_time#History稍微解释了Unix时间的起源和所选择的时代。Unix时间和纪元日期的定义经过了几次更改,然后才稳定下来。

但这并没有说明为什么最终选择了确切的1/1/1970。

维基百科页面的摘录:

第一版本的Unix程序员手册年11月3,Unix时间1971定义为“时间,因为00:00:00,1年1月,1971年,在第二的六十分测量”。

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

后来的一些问题,包括当前定义的复杂性,是由于Unix时间已经逐渐由用法定义的,而不是一开始就被完全定义的。


6

时代参考日期

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

在使用许多时代

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

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

这种时代的选择是任意的

大型计算机系统和库至少使用了几十个不同时期。使用您提到的1970 UTC时刻,最流行的纪元之一通常是Unix Time

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

许多粒度

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

甚至所谓的“ Unix时间”也有所不同,有些系统会计算整,有些会计算毫秒。许多数据库(例如Postgres)都使用微秒。有些,例如Java 8和更高版本中的现代java.time框架,使用纳秒。有些使用其他粒度。

ISO 8601

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

ISO 8601标准提供了一套丰富的实践精心设计的格式表示日期时间值作为文本。这些格式易于通过机器解析,也易于人类跨文化阅读。

这些包括:


-10

简短的回答:为什么不呢?

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

选择一个不同的时代没有太大的优点。


37
因为Unix是1969年开发的,并于1971年首次发布,因此可以合理地假设没有机器必须代表早于1970-01-01-00:00:00的系统时间。
约尔格W¯¯米塔格

3
作为历史模拟游戏的开发者,某些时间对象的设计者倾向于假设所有程序只希望表示将来或最近的日期,这似乎很可笑。当然,我们可以编写自己的表示形式,或者以调整因子进行工作,但是仍然可以。
德隆兹

8
同前历元问题适用于“实用”非游戏类应用,如商业电子表格,科学的数据显示,时间机器的UI,等等
Lenoxus

7
@Dronz您必须考虑到这是为72000美元的计算机设计的,该计算机具有9KB的RAM,它使用晶体管和二极管作为逻辑门作为CPU(当时没有芯片!)。因此,使最基本的东西起作用并不“傻”。
卡米洛·马丁

2
OP在元级别上是正确的,我们为时间制定的方案始终相当随意。一年中的天数,一个月中的天数,年“ 0”以及for年的规则是……疯狂的。每个系统都是一系列糟糕的折衷方案,因为这是他们可以利用现有技术所能做到的最好的选择,并且在其立即使用的情况下也能很好地工作。所有工程项目都是如此
:)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.