根据第一版Unix 程序员手册 http://cm.bell-labs.com/cm/cs/who/dmr/pdfs/man22.pdf, Unix 时间定义为“自 1971 年 1 月 1 日 00:00:00 以来的时间,以六十分之一秒为单位测量”
该值何时更改为 1970 年 1 月 1 日午夜 (UTC) 的当前值?
在第一版 Unix(1971 年 11 月)中,time 系统调用的手册页 http://man.cat-v.org/unix-1st/2/sys-time声明它返回“自 1971 年 1 月 1 日 00:00:00 以来的时间,以六十分之一秒为单位”。这是一个 32 位值,因此即使视为无符号,它也只能跟踪该日期之后大约 2.26 年。然而手册页和源码注释 http://minnie.tuhs.org/cgi-bin/utree.pl?file=V1/u2.s将系统调用描述为“获取一年中的时间”,年份不能是set http://man.cat-v.org/unix-1st/1/sdate,以及date http://minnie.tuhs.org/cgi-bin/utree.pl?file=V3/man/man1/date.1命令和ctime() http://man.cat-v.org/unix-1st/3/ctime函数(用于格式化日期和时间)无法格式化年份,甚至无法正确处理大于 1 年的时间值,因此可能预计每年都会手动重置日期,并且手册页中的 1971 年为意义不大。好吧,除了 1972 年多了一天这个小问题之外;对此,note http://minnie.tuhs.org/cgi-bin/utree.pl?file=V3/man/man3/ctime.3后来添加到错误部分:“例程必须为闰年重新组装”。好的。
1972 年,时间系统调用的手册页是changed http://minnie.tuhs.org/cgi-bin/utree.pl?file=V3/man/man2/time.2声明它返回自“1972 年 1 月 1 日 00:00:00”以来的时间,并附注:“时间以 32 位存储。这保证每 2.26 年发生一次危机。”
在第四版 Unix 中(1973 年 11 月)时间系统调用 http://minnie.tuhs.org/cgi-bin/utree.pl?file=V4/man/man2/time.2更改为返回“自 1970 年 1 月 1 日 00:00:00 GMT 以来的时间,以秒为单位”。 (手册页的日期为 1973 年 8 月 5 日,因此可能是最初进行更改的时间。)这基本上是当前的定义,除了历史术语GMT已被更精确的协调世界时并对闰秒进行了澄清。在将其作为有符号 32 位数字返回的系统上,这将一直有效,直到2038年 http://en.wikipedia.org/wiki/Year_2038_problem。幸运的是,现在许多系统都使用 64 位作为该值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)