为什么是1970年1月1日被认为是 * 纪元时间 *?
kxkpmulp1#
早期版本的unix以1/60秒为间隔测量系统时间。这意味着32位无符号整数只能表示小于829天的时间跨度。因此,数字0表示的时间(称为 * 历元 *)必须设置在最近的过去。由于这是在20世纪70年代初,历元被设置为1971-01-01。后来,系统时间改为每秒递增,这将32位无符号整数所表示的时间跨度增加到了136年左右。由于不再需要从计数器中挤出每一秒,历元被四舍五入到最近的十位,从而成为1970-01-01。人们必须假设这被认为比1971-01-01整洁一点。请注意,使用1970-01-01作为其历元的32位 * 有符号 * 整数可以表示直到2038-01-19的日期,在该日期它将环绕到1901-12-13。
0
sf6xfgos2#
历史。最早版本的Unix时间有一个以60 Hz的速率递增的32位整数,这是早期Unix系统硬件上的系统时钟速率。因此,60 Hz的值仍然出现在一些软件界面中。历元也与当前值不同。*第一版 * Unix程序员手册,日期为11月3日。1971将Unix时间定义为“自1971年1月1日00:00:00起的时间,以60分之一秒为单位”。
t3psigkw3#
epoch reference date是时间轴上的一个点,我们从这个点开始计算时间。这个点之前的时刻以负数计算,之后的时刻以正数计算。许多时代在使用为什么1970年1月1日00:00:00被视为纪元时间?不,不是那个时代,是一个时代。有很多时代在使用。这种历元的选择是任意的。主要的计算机系统和图书馆使用至少几十个不同的纪元中的任何一个。最流行的纪元之一通常被称为Unix Time,使用你提到的1970 UTC时刻。Unix Time的1970年虽然流行,但可能不是最常见的。同样最常见的是1900年1月0日,无数的微软Excel和Lotus 1-2-3电子表格,或者2001年1月1日,苹果的可可框架在全球超过10亿台iOS/macOS机器上的无数应用程序中使用。或者1980年1月6日,GPS设备使用?
不同的系统在计算时间时使用不同的粒度。即使是所谓的“Unix Time”也各不相同,有些系统计算整个seconds,有些系统计算milliseconds。许多数据库(如Postgres)使用microseconds。有些数据库(如Java 8及更高版本中的现代 java.time 框架)使用nanoseconds。有些数据库还使用其他粒度。
因为在使用历元引用和粒度方面存在很多差异,通常最好避免将时刻作为从历元开始计数的方式进行通信。在历元和粒度的模糊性之间,加上人类无法感知有意义的值(因此会错过有缺陷的值),使用纯文本而不是数字。ISO 8601标准提供了一组广泛的实用且设计良好的格式,用于将日期-时间值表示为文本。这些格式易于由计算机解析,也易于由跨文化的人阅读。其中包括:
2019-01-23
2019-01-23T12:34:56.123456Z
2019-01-23T18:04:56.123456+05:30
2019-234
vx6bjr1n4#
http://en.wikipedia.org/wiki/Unix_time#History 解释了一些关于Unix时间和所选纪元的起源。Unix时间和纪元日期的定义经历了几次变化,才稳定在现在的定义上。但它没有说明为什么最终选择了1970年1月1日。以下是维基百科页面中值得注意的摘录:1971年11月3日出版的第一版Unix程序员手册将Unix时间定义为“从1971年1月1日00:00开始的时间,以60分之一秒为单位”。由于范围有限,在将频率更改为1 Hz并将时段设置为当前值之前,时段被多次重新定义。后来的几个问题,包括目前定义的复杂性,是由于Unix时间是通过使用逐渐定义的,而不是一开始就完全定义的。
ogq8wdun5#
简短回答:为什么不呢?更长的回答:时间本身并不重要,只要每个使用它的人都同意它的价值。由于1/1/70已经使用了这么长时间,使用它会使你的代码尽可能多的人理解。选择一个任意的时代来与众不同并没有什么好处。
5条答案
按热度按时间kxkpmulp1#
早期版本的unix以1/60秒为间隔测量系统时间。这意味着32位无符号整数只能表示小于829天的时间跨度。因此,数字
0
表示的时间(称为 * 历元 *)必须设置在最近的过去。由于这是在20世纪70年代初,历元被设置为1971-01-01。后来,系统时间改为每秒递增,这将32位无符号整数所表示的时间跨度增加到了136年左右。由于不再需要从计数器中挤出每一秒,历元被四舍五入到最近的十位,从而成为1970-01-01。人们必须假设这被认为比1971-01-01整洁一点。
请注意,使用1970-01-01作为其历元的32位 * 有符号 * 整数可以表示直到2038-01-19的日期,在该日期它将环绕到1901-12-13。
sf6xfgos2#
历史。
最早版本的Unix时间有一个以60 Hz的速率递增的32位整数,这是早期Unix系统硬件上的系统时钟速率。因此,60 Hz的值仍然出现在一些软件界面中。历元也与当前值不同。*第一版 * Unix程序员手册,日期为11月3日。1971将Unix时间定义为“自1971年1月1日00:00:00起的时间,以60分之一秒为单位”。
t3psigkw3#
纪元参考日期
epoch reference date是时间轴上的一个点,我们从这个点开始计算时间。这个点之前的时刻以负数计算,之后的时刻以正数计算。
许多时代在使用
为什么1970年1月1日00:00:00被视为纪元时间?
不,不是那个时代,是一个时代。有很多时代在使用。
这种历元的选择是任意的。
主要的计算机系统和图书馆使用至少几十个不同的纪元中的任何一个。最流行的纪元之一通常被称为Unix Time,使用你提到的1970 UTC时刻。
Unix Time的1970年虽然流行,但可能不是最常见的。同样最常见的是1900年1月0日,无数的微软Excel和Lotus 1-2-3电子表格,或者2001年1月1日,苹果的可可框架在全球超过10亿台iOS/macOS机器上的无数应用程序中使用。或者1980年1月6日,GPS设备使用?
多粒度
不同的系统在计算时间时使用不同的粒度。
即使是所谓的“Unix Time”也各不相同,有些系统计算整个seconds,有些系统计算milliseconds。许多数据库(如Postgres)使用microseconds。有些数据库(如Java 8及更高版本中的现代 java.time 框架)使用nanoseconds。有些数据库还使用其他粒度。
ISO 8601标准
因为在使用历元引用和粒度方面存在很多差异,通常最好避免将时刻作为从历元开始计数的方式进行通信。在历元和粒度的模糊性之间,加上人类无法感知有意义的值(因此会错过有缺陷的值),使用纯文本而不是数字。
ISO 8601标准提供了一组广泛的实用且设计良好的格式,用于将日期-时间值表示为文本。这些格式易于由计算机解析,也易于由跨文化的人阅读。
其中包括:
2019-01-23
2019-01-23T12:34:56.123456Z
2019-01-23T18:04:56.123456+05:30
2019-234
vx6bjr1n4#
http://en.wikipedia.org/wiki/Unix_time#History 解释了一些关于Unix时间和所选纪元的起源。Unix时间和纪元日期的定义经历了几次变化,才稳定在现在的定义上。
但它没有说明为什么最终选择了1970年1月1日。
以下是维基百科页面中值得注意的摘录:
1971年11月3日出版的第一版Unix程序员手册将Unix时间定义为“从1971年1月1日00:00开始的时间,以60分之一秒为单位”。
由于范围有限,在将频率更改为1 Hz并将时段设置为当前值之前,时段被多次重新定义。
后来的几个问题,包括目前定义的复杂性,是由于Unix时间是通过使用逐渐定义的,而不是一开始就完全定义的。
ogq8wdun5#
简短回答:为什么不呢?
更长的回答:时间本身并不重要,只要每个使用它的人都同意它的价值。由于1/1/70已经使用了这么长时间,使用它会使你的代码尽可能多的人理解。
选择一个任意的时代来与众不同并没有什么好处。