为什么是
00:00:00 1970年1月1日
考虑划时代的时间 ?
为什么是
00:00:00 1970年1月1日
考虑划时代的时间 ?
在1/60秒的时间间隔的测量的UNIX系统时间早版本。 这意味着,一个32位无符号整数只能代表的时间少于829天的跨度。 出于这个原因,用数字表示的时间0
(称为划时代 )曾在非常最近进行设置。 由于这是在70年代初,时代设定为1971年1月1日。
以后,系统时间改变为递增每一秒,这增加了可能由一个32位无符号整数围绕136年来表示时间跨度。 由于它不再是那么重要挤每秒走出柜台,时代四舍五入到最接近的十年,从而成为1970-1-1。 我们必须假设,这被认为是一个有点整洁比1971年1月1日。
请注意,使用1970-1-1作为其划时代的32位有符号整数能表示日期达到2038年1月19日 ,从该日起,将环绕到1901年12月13日。
历史 。
的Unix时间的最早版本的有32位的整数,在60赫兹的速率,这是在早期的Unix系统的硬件系统时钟的速率递增。 值60赫兹仍然出现在一些软件界面结果。 历元还从电流值不同。 第一版的Unix程序员手册日1971年11月3日的Unix时间定义为“由于00:00:00的时间,1971年1月1日,在第二的六十分测量”。
http://en.wikipedia.org/wiki/Unix_time#History解释一点点关于Unix时间的起源和选择的时代。 UNIX的时间和时代日期的定义,通过一对夫妇的变化就稳定在现在几点了。
但它没有说究竟为什么1/1/1970到底选择。
从维基百科页面值得注意的摘录:
第一版的Unix程序员手册日1971年11月3日的Unix时间定义为“00:00:00以来的时间,1971年 1月1日,在第二的六十分测量”。
因为[该]限定范围的,划时代被重新定义一次以上 ,速率改变为1赫兹之前和历元被设置为它的现值。
后面几个问题,包括在本定义的复杂性,从已经通过使用逐渐定义Unix时间,而不是完全定义的开始与导致。
一个划时代的参考日期是从我们统计的时间在时间轴上的一个点。 该点前的一段时间都算有负数,片刻都算一个正数。
为什么是1970年1月00:00:00认为是划时代的时间?
不,不是的时代, 具有划时代意义。 现在使用的许多时期 。
划时代的这种选择是任意的 。
主要电脑系统和库使用至少一个的任何几十个不同时代 。 其中最流行的时代被俗称UNIX时间 ,使用你所提到的1970年UTC时刻。
虽然流行,UNIX时间在1970年未必是最常见的。 此外,在对最常见的运行将在1月0,1900年无数的Microsoft Excel和Lotus 1-2-3的电子表格,或2001年1月1日,在无数的应用程序超过十亿全球的iOS / MacOS的机器使用苹果的Cocoa框架。 或许1980年1月6日,使用GPS设备?
不同的系统在计算时间使用不同的粒度。
即使是所谓的“Unix时间”不同,一些系统计算整个秒和一些统计毫秒 。 许多数据库如Postgres的微秒 。 有些人,如在Java中8现代java.time框架和后,利用纳秒 。 一些使用其它粒度。
因为有这么多的方差在使用一个划时代的参考,并在粒度,所以一般最好避免作为计数从历元进行通信的时刻。 时代和粒度的不确定性,再加上人类无法感知有意义的值(并因此错过马车值)之间,使用纯文本,而不是数字。
在ISO 8601标准提供了一套丰富的实践精心设计的格式表示日期时间值作为文本。 这些格式很容易通过机器来解析以及容易被人类跨文化阅读。
这些包括:
2019-01-23
2019-01-23T12:34:56.123456Z
2019-01-23T18:04:56.123456+05:30
2019-234
简短的回答:为什么不呢?
较长的答案是:时间本身并不重要,只要大家谁使用它同意其价值。 作为1/1/70已经使用了这么久,使用它会使你的代码尽可能理解为尽可能多的人越好。
有在选择任意的时期正好是不同的无大功。