RIVALSA网络日志

Unix时间戳简介

于2020-09-13发布

今天下午,偶然查了一下当前的Unix时间戳,发现值为1599982008,也就是说,再过不长时间,时间戳就要以“16”开头了。自我知道Unix时间戳以来,它一直是一个以“15”开头的整数,所以我希望能在Unix时间戳以“16”开头的这个时刻之前写出一篇介绍Unix时间戳的博文。以“16”开头的第一个时间戳为1600000000,对应的北京时间为2020年9月13日20时26分40秒。

什么是Unix时间戳?

Unix时间戳是为了用一个整数来表示时间而设计的,以UTC时间的1970年1月1日0时0分0秒为起点,每过1秒Unix时间戳就增加1(不考虑闰秒情况,例如:UTC时间2016年12月31日23时59分59秒对应的Unix时间戳为1483228799,而UTC时间2017年1月1日0时0分0秒的时间戳为1483228800)。

Unix时间戳在2038年的问题

如果Unix时间戳计时系统是有符号32位的,则会在2038年遇到时间重置的问题,其产生的原因如下:

由于有符号的32位二进制数能表示的最大数字为0b1111111111111111111111111111111(十进制:2147483647,十六进制:0x7FFFFFFF),其对应的UTC时间为2038年1月19日3时14分7秒。再增加1秒后,其二进制数会变为0b10000000000000000000000000000000(十进制:-2147483648,十六进制:0x80000000),其对应的UTC时间为1901年12月13日20时45分52秒。这个问题可能会导致部分应用程序发生问题,甚至导致系统瘫痪。

Unix时间戳在2038年的问题

目前,此问题解决方案就是将Unix时间戳系统从32位升级为64位。在64位系统中,时间重置问题会发生在292277026596年12月4日15时30分8秒。

本文创作完成时的时间戳为1599997534,对应的北京时间为2020年9月13日19时45分34秒。

(正文完)

已获得5个赞0个差评

1条评论

Rivalsa MOD - 2020-09-17 23:04:35

补充关于闰秒与Unix时间戳的对应关系:
对于正闰秒的情况,会有一个Unix时间戳对应2个UTC时间;而对于负闰秒的情况(目前从未发生过),会有一个Unix时间戳没有与其对应的UTC时间。
参考资料:https://en.wikipedia.org/wiki/Unix_time

发表评论