根据第一版Unix Programmer's Manual,Unix 时间被定义为“从 1971 年 1 月 1 日 00:00:00 开始的时间,以六十分之一秒为单位”
此值何时更改为 1970 年 1 月 1 日午夜 (UTC) 的当前值?
根据第一版Unix Programmer's Manual,Unix 时间被定义为“从 1971 年 1 月 1 日 00:00:00 开始的时间,以六十分之一秒为单位”
此值何时更改为 1970 年 1 月 1 日午夜 (UTC) 的当前值?
在第一版 Unix(1971 年 11 月)中,时间系统调用的手册页声明它返回“自 1971 年 1 月 1 日 00:00:00 以来的时间,以六十分之一秒为单位”。这是一个 32 位的值,因此即使被视为无符号,它也只能在此日期之后跟踪大约 2.26 年。然而,手册页和源代码注释将系统调用描述为“获取一年中的时间”,无法设置年份,并且date
命令和ctime()
函数(用于格式化日期和时间)没有格式化一年,甚至无法在大于 1 年的时间值下正常工作,因此可能预计每年都会手动重置日期,而手册页中的 1971 年是意义不大。好吧,除了 1972 年多出一天的小问题;关于这一点,后来在错误部分添加了一条注释:“必须为闰年重新组装例程”。好的。
1972 年,时间系统调用的手册页更改为声明它返回自“1972 年 1 月 1 日 00:00:00”以来的时间,并附注:“时间以 32 位存储。这保证了每 2.26 年发生一次危机。”
在第四版 Unix(1973 年 11 月)中,时间系统调用被更改为返回“自 1970 年 1 月 1 日 00:00:00 GMT 以来的时间,以秒为单位”。(手册页的日期为 1973 年 8 月 5 日,因此可能是最初进行更改的时间。)这基本上是当前的定义,除了历史术语GMT已被更精确的协调世界时取代,并且澄清已经关于闰秒。在将其作为带符号的 32 位数字返回的系统上,这将一直有效到2038 年。幸运的是,许多系统现在使用 64 位来表示这个值。