iHTCboy
2020-03-01 12:56:54 +08:00
2038 年问题 又叫 Unix 千年臭虫 或 Y2K38 错误。
32 位元作业系统上,此「 time_t 」资料模式使用一个有正负号的 32 位元整数( signed int 32 )储存计算的秒数。
也就是最大值(二进制):01111111 11111111 11111111 11111111
换成十进制(时间戳):2147483647 (秒)
换成北京时间:2038-01-19 11:14:07
过了那个时间后,由于整数溢出
时间值将作为负数来存储:10000000 00000000 00000000 00000000
系统会将日期读为 1901 年 12 月 13 日,而不是 2038 年 1 月 19 日!
到那一天,使用标准时间库的 C 程序会开始出现日期问题!
当然
新的 64 位元运算器可以记录有正负号的 64 位元整数,可以将日期延长至今后的 2920 亿年!
北京时间:292,277,026,596 年 12 月 4 日 23:30:08
最后
32/64 位操作系统、32/64 位应用程序和 32/64 位整型类型之间是个什么关系呢?