为什么要从1970年1月1日开始计算日期?


95

使用date(1970年1月1日)作为时间操纵的默认标准有什么原因吗?我已经在Java和Python中看到了这个标准。我知道这两种语言。还有其他遵循相同标准的流行语言吗?

请描述。


1
遵循相同标准的另一种流行语言是PHP,它是一个相当普遍的时间起点。
格雷格K

Answers:


65

这是Unix时间的标准

Unix时间(或POSIX时间)是一种用于描述时间点的系统,时间点定义为自1970年1月1日午夜多点协调世界时(UTC)起经过的秒数,不包括leap秒。


5
您是否知道Kernighan和Thompson是否都表达了选择那一刻的理由,而不仅仅是“在我们开始构建东西之前这是一个整数”。
dmckee ---前版主小猫

这是一年的开始,在零时区(Zulu)。两者都使日期格式代码更简单。
Donal Fellows

28
不算leap秒吗?我不知道那个细节。考虑了片刻之后,我明白了为什么你会那样做,但是,伙计。我的世界崩溃了。24秒。
keturn

69

使用日期(1970年1月1日)作为默认标准

该问题有两个错误的假设:

  • 自1970年以来,计算领域的所有时间跟踪工作都已开始。
  • 这种跟踪是标准的。

两个打时代

从1970年UTC开始并不总是跟踪计算时间。虽然那个时代参考很流行,但几十年来的各种计算环境至少使用了近二十个时代。有些来自其他世纪。范围从0年(零)到2001年。

这里有一些。

公元前1月1日,1月0日

公元1月1日,

1582年10月15日

1601年1月1日

1840年12月31日

1858年11月17日

1899年12月30日

1899年12月31日

1900年1月1日

1904年1月1日

1967年12月31日

1980年1月1日

1980年1月6日

2000年1月1日

2001年1月1日

Unix时代常见,但不占主导地位

1970年初开始流行,可能是因为它被Unix使用。但这绝不是主导。例如:

ISO 8601

假设count-since-epoch正在使用Unix纪元,将给漏洞带来很大的漏洞。对于人类来说,这样的计数是不可能立即解密的,因此在调试和记录日志时,不容易标记出错误或问题。另一个问题是下面解释的粒度不明确。

我强烈建议您将日期时间值序列化为明确的ISO 8601字符串以进行数据交换,而不是将整数count-since-epoch进行序列化:YYYY-MM-DDTHH:MM:SS.SSSZ例如2014-10-14T16:32:41.018Z

什么,自纪元

自计时以来时间跟踪的另一个问题是时间单位,通常至少使用四个级别的分辨率。

该图显示了从纪元开始以秒,毫秒,微秒或纳秒为单位的不同软件计数。


1
我想知道此时此刻的主导时代是什么...您是否基于数据?
PascalVKooten

1
@PascalVKooten在许多不同的环境和软件系统中使用了许多不同的时期。因此,没有一个主导时代。我的意思是永远不要承担时代。了解您的数据源。最好的方法是让数据源完全避免时代问题,而仅使用ISO 8601字符串,恕我直言。
罗勒·布尔克

1
感谢您的回复。我知道有很多,但是我很想知道例如POSIX是否随着时间的推移变得越来越流行。
PascalVKooten

7

为什么总是1970年1月1日,因为-1970年1月1日通常称为“时代日期”,是Unix计算机的开始时间,该时间戳记为“ 0”。自该日期以来的任何时间都是根据经过的秒数计算的。用简单的话来说...任何日期的时间戳都将是该日期与“ 1970年1月1日”之间的秒数差异。时间戳只是一个整数,它从“ 1970年1月1日午夜”的数字“ 0”开始并继续递增每隔一秒钟传递“ 1”,以将UNIX时间戳转换为可读日期PHP和其他开源语言提供了内置函数。


5

使用date(1970年1月1日)作为时间操纵的标准背后有什么原因吗?

没关系。

Python的time模块 C库。问肯·汤普森(Ken Thompson)为什么他选择那个日期作为一个时代的日期。也许是某人的生日。

Excel使用两个不同的时期。为什么不同版本的excel使用不同的日期?

除了真正的程序员之外,没有其他人会知道为什么做出这些决定。

和...

不要紧,为什么选择的日期。只是。

天文学家使用他们自己的时代日期:http : //en.wikipedia.org/wiki/Epoch_(天文学

为什么?必须选择一个日期来计算数学。任何随机的日期都可以。

过去的日期通常会避免使用负数。

一些更聪明的软件包使用了多功的公历1年。为什么是1年?
在诸如Calendrical Calculations之类的书中给出了一个原因:从数学上讲它稍微简单一些。

但是如果您考虑一下,1/1/1和1/1/1970之间的差异只是1969,这是一个微不足道的数学偏移量。


1
如果选择1/1/1,那么到现在我们将用完几秒钟(2 ^ 31)。就目前而言,我们将在2038年面对32位操作系统的类比Y2K问题。 en.wikipedia.org/wiki/Year_2038_problem
Chris Nava 2010年

1
@Chris Nava:使用1/1/1的人是数天,而不是秒。20亿天大约是500万年。通常,他们会保持一对(时间)以最大化时间分辨率;在大多数日子里只有86400秒。
S.Lott

@ S.Lott:是的。我只是指出,由于大多数软件都从时代开始算秒(而不是分钟),所以过去的1/1/1是合理的开始日期。因此,选择了一个较新的日期作为计算机时代(以及相关的IT革命的开始。;-)
Chris Nava 2010年

@克里斯·纳瓦:“最多”?我认为“最多”是指“ Linux”。其他操作系统的工作方式不同于Linux。问题是“合理”和“为什么1/1/1970?” 不容易回答的问题;最重要的是,答案并不重要。“合理”是真实的,但它不是原因为何。原因为何事只有肯·汤普森可以回答。
S.Lott


2

问: “为什么要从1970年1月1日开始计算日期?”

A)它必须尽可能新,但要包含一些过去。很多人也有同样的感觉,很可能没有其他明显的原因。

他们知道如果把它放到过去就太远了,就会构成问题;如果知道将来会带来负面的结果,他们就会知道。由于事件很可能会在未来发生,因此过去无需深入探讨。

注意: 另一方面,玛雅人需要将事件放到过去,因为他们了解很多过去,因此他们进行了长期压延。只是将所有常规现象放在压延机上。

时间戳并非日历,而是一个时代。而且我相信,玛雅人也使用相同的观点进行了长期压延。(这意味着他们非常了解自己与过去没有任何关系,只需要从更大的角度来看待过去)


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.