为什么Unix时间从1970-01-01开始?


Answers:


28

除了谷歌在那里,我不会知道答案:

这里(需要免费订阅):

Linux遵循Unix设定的传统,即自1970年1月1日正式“生日”(以计算术语称为“时代”)以来以秒为单位计时。

可以在此《有线新闻》中找到更完整的解释。 它解释说,早期的Unix工程师任意选择该日期,因为他们需要为时间的开始设定统一的日期,而1970年的元旦似乎最方便。


5

Unix并非诞生于1970年。

Unix时代是1970年1月1日午夜。重要的是要记住,这不是Unix的“生日”,操作系统的粗略版本是在1960年代左右。相反,根据贝尔实验室最初在Unix上工作的工程师之一丹尼斯·里奇(Dennis Ritchie)的说法,日期是在70年代初的某个时候被编程到系统中的,因为这样做很方便。


那时很方便,从那时起对世界各地的开发人员都是不方便的。
克里斯·哈克罗

3
@ChrisHalcrow:如果您是dmr,您将选择什么作为时间0?对于开发人员而言,选择有何不便?不便之处是因为以“人类”术语(年,月,日,小时/分钟/秒,时区,夏时制)测量时间很复杂,而不是因为选择了一些(任意)$ t = 0 $瞬间。
NickD

@NickD,很好的提示说明和观点!不过,我会选择CE 0的00:00:00,因为我相信这会使事情更容易计算。请说明什么是“ dmr”?同样,具有讽刺意味的是,OP要求解释为什么选择此日期这一事实表明,某人固有地混淆了理解01/01/70作为参考日期的用法!
克里斯·哈尔克劳

2
@ChrisHalcrow:dmr =丹尼斯·里奇。您是否计算了从所选起点到今天的秒数?需要多少位?PDP-11具有16位寄存器和字,但是它允许您将两个寄存器和两个字组合在一起,以构成某些操作的32位寄存器和双字。这使您从0时间起算为+/- 68年(如果您的时间未签名,则为+136年-但dmr选择了签名)。第一次看到它,他的选择可能会有些令人
迷惑

1
@NickD-很棒的解释!这应该是已接受答案的一部分-为什么不将您的评论移到那里,我们可以从这里删除我们的评论?
克里斯·哈尔克劳

1

我喜欢这个问题:-)

让我尝试回答(当然来源:互联网)

Unix时间由32位整数(整数)表示,可以是正数或负数(有符号)。Unix最初是在60年代和70年代开发的,因此Unix Time的“开始”设置为1970年1月1日格林尼治标准时间(格林威治标准时间)-此日期/时间的Unix Time值设置为0。作为Unix Epoch。

一个32位带符号整数可以表示-2147483648和2147483647之间的整数。由于Unix Time从0开始,所以Unix Time的负值从纪元开始倒退,而正数在时间上倒退。这表示Unix时间跨度是从1901年12月13日格林尼治标准时间-2147483648或20:45:52 GMT到2038年1月19日格林尼治标准时间2147483647或3:14:07 GMT。这些日期代表开始时间,即前史和Unix时间的结束。

Unix时间的结束将在格林尼治标准时间2038年1月19日03:14:07。2038年1月19日格林威治标准时间(GMT),所有仍使用32位Unix Time的计算机都将溢出。这就是所谓的“ 2038年问题”。一些人认为,这将是比“ 2000年问题”更为严重的问题。解决2038年问题的方法是将Unix Time存储在64位整数中。大多数64位操作系统中已经在进行此操作,但是许多系统可能到2038年都无法更新。


5
这篇文章只有一段实际上解决了这个问题,而且有些不准确(时代最初是1971年;后来被移开了)
Michael Mrozek


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

@Nikhil我还是不明白为什么是1970年,仅因为那时Unix是开发的?为什么不是1960年?还是不同的月份?
圣堂武士

@Nikhil还是没关系?只是第一个月的第一天看起来更好,它是在1971年制造的,所以1970年也会看起来更好吗?
圣堂武士
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.