本章介绍时间戳,时间戳的定义、时间戳问题、危机详细分析、计算机2038年要面临的问题、代码模拟以及回顾2000年千年虫危机。
目录
1. 时间戳的定义
时间戳,定义为从经度0°的英国格林尼治1970年1月1日0时0分0秒起算,到现在所经过的秒数。因为中国在东八区,比格林尼治早8个小时,当格林尼治0点时,中国已经是8点了,所以对于中国地区,时间戳就是从北京时间1970年1月1日8时0分0秒起算,到现在所经过的秒数。时间戳的定义解决了计算机无法计算时间的问题。
2. 时间戳危机
在60年代,但是计算机存储器的成本很高,普遍采用了32位的存储器,许多设备和程序都使用32位存储器,至今,正是现在所说的电脑内核32位64位。随着1997年 “千年虫” 的的警钟拉起,人们逐渐意识到位数的不足导致的众多问题。
时间戳是有 “耗尽” 的一天的,按照32位的时间戳存储结构,它能正确表示的秒数最大为2147483647(2的31次方,第一位是符号位),即到英国格林尼治时间 2038年1月19日03:14:07秒,也就是北京时间 2038年1月19日11:14:07秒。届时所有32位的设备和32位的程序都会受到严重的影响。
3. 详细分析
这个问题的出现是由C语言引起的,而C语言为python的母语。在C语言中,用time_t (整数int型)来表示日期和时间,它以32位数据进行存储,其中最高位为符号位(0表示正数,1表示负数),剩余的31位用来存储数字,所以32位仅能表示2的31次方=2147483648秒,对于时间戳,一旦超过2147483648秒,即英国格林尼治时间 2038年1月19日03:14:07秒,计算机时间便出现问题。
