当前位置: 技术问答>linux和unix
unix2038问题是什么
来源: 互联网 发布时间:2016-01-16
本文导语: 这期程序员上看到说64位是否能解决unix2038问题,请问这个问题是什么问题?我在网上找了好久也没搜到相关的具体解释. | http://www.chinaunix.net/jh/23/883837.html UNIX操作系统中的时间 UNIX及Linux的时间...
这期程序员上看到说64位是否能解决unix2038问题,请问这个问题是什么问题?我在网上找了好久也没搜到相关的具体解释.
|
http://www.chinaunix.net/jh/23/883837.html
UNIX操作系统中的时间
UNIX及Linux的时间系统是由「新纪元时间」Epoch开始计算起,单位为秒,Epoch则是指定为1970年一月一日凌晨零点零分零秒,格林威治时间。
目前大部份的UNIX系统都是用32位元来记录时间,正值表示为1970以後,负值则表示1970年以前。我们可以很简单地计算出其时间领域(当前几乎所有操作系统都假定 1 天 = 24 × 60 × 60 = 86400 秒):
2^31/86400(s) = 24855.13481(天) ~ 68.0958(年)
1970+68.0958 = 2038.0958
1970-68.0958 = 1901.9042
时间领域为[1901.9042,2038.0958], 这就是所谓的UNIX 2038 BUG
在一些64位元的平台上,例如Digital Alpha、SGI、Sparc等等,则用64位元来表示时间。
2^63/86400 ~ 1E14(天) ~ 2.92E11(年)
大约是292亿年,这样就无需担心了。不过虽然到2038年时,大部分目前32位元或更低位元的计算机将被64位元或更高位元的计算机所替代,不过对那些依然在服役的32位元或更低位元的计算机依然需要处理该问题。
UNIX操作系统中的时间
UNIX及Linux的时间系统是由「新纪元时间」Epoch开始计算起,单位为秒,Epoch则是指定为1970年一月一日凌晨零点零分零秒,格林威治时间。
目前大部份的UNIX系统都是用32位元来记录时间,正值表示为1970以後,负值则表示1970年以前。我们可以很简单地计算出其时间领域(当前几乎所有操作系统都假定 1 天 = 24 × 60 × 60 = 86400 秒):
2^31/86400(s) = 24855.13481(天) ~ 68.0958(年)
1970+68.0958 = 2038.0958
1970-68.0958 = 1901.9042
时间领域为[1901.9042,2038.0958], 这就是所谓的UNIX 2038 BUG
在一些64位元的平台上,例如Digital Alpha、SGI、Sparc等等,则用64位元来表示时间。
2^63/86400 ~ 1E14(天) ~ 2.92E11(年)
大约是292亿年,这样就无需担心了。不过虽然到2038年时,大部分目前32位元或更低位元的计算机将被64位元或更高位元的计算机所替代,不过对那些依然在服役的32位元或更低位元的计算机依然需要处理该问题。
|
UNIX现在表示时间的方式只能到2038年