为什么是
1970年1月1日00:00:00
考虑到时代了?
为什么是
1970年1月1日00:00:00
考虑到时代了?
Answers:
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。
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时间已经逐渐由用法定义的,而不是一开始就被完全定义的。
一个划时代的参考日期是从我们统计的时间在时间轴上的一个点。该点之前的时刻记为负数,之后的时刻记为正数。
为什么将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标准提供了一套丰富的实践精心设计的格式表示日期时间值作为文本。这些格式易于通过机器解析,也易于人类跨文化阅读。
这些包括:
简短的回答:为什么不呢?
更长的答案:时间本身并不重要,只要使用它的每个人都同意它的价值。由于1/1/70已经使用了很长时间,因此使用它会使您的代码对尽可能多的人尽可能地易于理解。
选择一个不同的时代没有太大的优点。