UNIX时间

时间表示法;从协调世界时1970年1月1日午夜经过的秒数(忽略闰秒)
当前Unix时间
1711551034
ISO 8601表示法
2024-03-27T14:50:34+00:00
如果时间不符,请尝试清除页面缓存

UNIX时间,或称POSIX时间UNIX类UNIX系统使用的时间表示方式:从UTC1970年1月1日0时0分0秒起至现在的总秒数,不考虑闰秒[1]。 在多数Unix系统上Unix时间可以透过date +%s指令来检查。

历史 编辑

最早版本的Unix时间是32位整型,以60 Hz增加。1971年11月3日发行的第一版《Unix Programmer's Manual》定义了Unix时间为“the time since 00:00:00, 1 January 1971, measured in sixtieths of a second”,即从1971年1月1日00:00:00开始,以60赫兹增加。[2]这意味着以32位无符号整型存储Unix时间,829天(约2.5年)后就将用尽重置。由于该限制,Unix时间原点被重定义多次,直至开始采用1970年1月1日00:00:00UTC为时间原点,以1赫兹计时。由于Unix和C语言采用32位有符号整型表示时间,这可容纳约136年的时间跨度,在1970年之前和之后各占一半。即到2038年1月19日和1901年12月13日用尽重置。

此后,这个Unix 时间定义考虑到时区,闰秒等问题被修订。

问题 编辑

2038年问题 编辑

 
2038年1月19日3时14分07秒,32位系统的UNIX时间将会被重置。

现时大部分使用UNIX的系统都是32位的,即它们会以32位有符号整数表示时间类型time_t。因此它可以表示136年的秒数。表示协调世界时间1901年12月13日星期五20时45分52秒至2038年1月19日3时14分07秒(二进制:01111111 11111111 11111111 11111111,0x7FFF:FFFF),在下一秒二进制数字会是10000000 00000000 00000000 00000000(0x8000:0000),这是负数,因此各系统会把时间误解作1901年12月13日20时45分52秒(亦有可能回归到1970年)。这时可能会令软件发生问题,导致系统瘫痪。

目前的解决方案是把系统由32位转为64位系统。在64位系统下,此时间最多可以表示到2922亿7702万6596年12月4日15时30分08秒。

Unix负时间导致部分iPhone手机无法启动 编辑

在2016年2月12日,据披露,如果把苹果iPhoneiPad等设备的系统时间设置为1970年1月1日,随后重启设备,它会无法正常启动。目前苹果公司正式承认了漏洞存在,但是尚未公布具体的引发原因。[3]部分中国大陆用户猜想这是因为调整当地时间到1970.1.1 0:00后,如果时区为正,那么GMT时间就早于UNIX定义的0时间。例如北京时间 1970.1.1 0:00 (UTC+0800) 是UTC 1969.12.31 16:00 对应的UNIX时间是负的。但是有人回应尝试设为正时区重启后仍然无法正常启动。[4]苹果对此采用的策略是在随后的固件更新中将时间禁止调整到2000年以前。

纪念日 编辑

UNIX时间以每5000日为纪念日,首4个5000日分别是1983年9月10日、1997年5月19日、2011年1月26日、2024年10月4日,第500个5000日(即第250万日)是8814年10月8日[5]

相关条目 编辑

参考文献 编辑

  1. ^ The Unix leap second mess. [2016-02-14]. (原始内容存档于2021-05-04). 
  2. ^ Unix Programmer's Manual (PDF) 1st. 1971-11-03 [2012-03-28]. (原始内容 (PDF)存档于2022-03-05). time returns the time since 00:00:00, 1 Jan. 1971, measured in sixtieths of a second. 
  3. ^ 苹果确认iPhone/iPad时间设置不对会变砖问题. [2016-02-16]. (原始内容存档于2019-05-02). 
  4. ^ 为什么把部分苹果设备的系统时间调整为1970.1.1,重启后就会变砖?. [2016-02-16]. (原始内容存档于2021-10-08). 
  5. ^ About Unix epoch time. [2011-01-27]. (原始内容存档于2011-01-29). 

外部链接 编辑