2038计算机系统,2038年问题

2038年问题是指在使用POSIX时间的32位计算机应用程序上,格林尼治时间2038年1月19日凌晨03:14:07(北京时间:2038年1月19日中午11:14:07)之后无法正常工作。

中文名

2038年问题

外文名

Year 2038 problem概    念

计算机bug(程序错误)

载    体

使用POSIX时间的32位应用程序

爆发时间

2038年1月19日03:14:07(UTC)(北京时间11:14:07)

2038年问题32位时间表示

编辑

语音

2038年问题前言

715fb7c42d7cbfc2beca72604a8cf090.gif

2038年问题演示在计算机应用上,2038年问题可能会导致某些软件在2038年无法正常工作。所有使用POSIX时间表示时间的程序都将受其影响,因为它们的时间起点是格林尼治时间1970年1月1日0时0分0秒(这个时间名叫 the Unix Epoch),它们用the Unix Epoch经过的秒数(忽略闰秒)来表示时间。这种时间表示法在类Unix(Unix-like)操作系统上是一个标准,并会影响以其C编程语言开发给其他大部份操作系统使用的软件。在大部分的32位操作系统上,此“time_t”数据模式使用一个有符号32位整数(signed int32)存储计算的秒数。依照此“time_t”标准,在此格式能被表示的最后时间是第2147483647秒(代表格林尼治时间2038年1月19日凌晨03:14:07)。下一秒,即格林尼治时间2038年1月19日凌晨03:14:08,由于32位整型溢出,时间将会被“绕回”(wrap around)成一个负数,变成了第 -2147483648 秒(代表格林尼治时间1901年12月13日20:45:52),造成应用程序发生严重的时间错误,而无法运行。

2038年问题正文

也许大家都已经知道计算机的2000年问题(the Millennium bug)是什么概念,但是什么时候又冒出来一个2038年问题的呢?

用C语言编制的程序不会碰到2000年问题,但是会有2038年问题。这是因为,大多数C语言程序都使用到一个叫做“标准时间库”的程序库,这个时间库用一个标准的4字节也就是32位的形式来储存时间信息。

当初设计的时候,这个4字节的时间格式把1970年1月1日凌晨0时0分0秒(这个时间名叫 the Unix Epoch)作为时间起点,这时的时间值为0。以后所有的时间都是从这个时间开始一秒一秒累积得来的。

比方说如果时间已经累积到了919642718这个数值,就是说这时距离 the Unix Epoch已经过去了919642718秒,换算一下就应该是1999年2月21日16时18分38秒(代表北京时间1999年2月22日0时18分38秒)。

这样计算时间的好处在于,把任意两个时间值相减之后,就可以很迅速地得到这两个时间之间相差的秒数,然后你可以利用别的程序把它换算成明白易懂的年月日时分秒的形式。

要是你曾经读过一点儿关于计算机方面的书,你就会知道一个4字节也就是32位的存储空间的最大值是2147483647,请注意,2038年问题的关键也就在这里———当时间一秒一秒地跳完2147483647那惊心动魄的最后一秒后,你猜怎么样?

答案是,它就会转为负数也就是说时间无效。那一刻的准确的时间为2038年1月19日星期二凌晨03:14:07,之后所有用到这种“标准时间库”的C语言程序都会碰到时间计算上的麻烦。

这就是2038年问题。

但是大家也不用太过紧张。2038年问题比千年虫(the Millennium bug)问题解决起来相对要容易一些,只要给那些程序换一个新版本的“标准时间库”就可以了,比如说,改用8字节64位的形式来存储时间。这样做并不怎么费事,因为在C程序中“标准时间库”是相对独立的一个部分,里面的时间表达都有自己的一套时间类型和参数(而在碰到Y2K的那些大型主机中,时间格式大都没有一)。

说到这里,一些冰雪聪明的菜鸟DDMM们应该可以联想到,WindowsNT用的是64位操作平台,它的开始时间是1601年1月1日———但是它每过1个纳秒就跳一下,因此,WindowsNT它会碰到的是2184年问题……

而在一些用64位来表示时间的平台上,例如DigitalAlpha、SGI、Sparc等等,想要看到它们的时间出错你得等到天荒地老———那大概是2920亿年。到那时,位于猎户座旋臂的太阳,已经是黑矮星或暗黑物质,猎户座旋臂已经被重力波震断,银河系大概则已经变成小型似星体了。

所以,给那些准备攒机的菜鸟DD一个建议,除非您想要把资料流传给下一个宇宙,一台64位的电脑已经足够。

总之,32位的最后时间是2038年1月19日03:14:07,星期二。

64位的最后时间约2900亿年后的292,277,026,596年12月4日15:30:08,星期日。

2038年问题64位时间表示

编辑

语音

新的64位运算器可以记录至约2900亿年后的292,277,026,596年12月4日15:30:08,星期日(UTC)(北京时间292,277,026,596年12月4日23:30:08)。

2038年问题解决进展

编辑

语音

截止2019年,并没有针对现有的CPU/操作系统搭配的简单解决方案。直接将POSIX时间更改为64位模式将会破坏对于软件、数据存储以及所有与二进制表示时间相关的部份的二进位兼容性。更改成无符号的32位运算器(integer)则会影响许多与时间改变相关的程序。

大部份64位操作系统已经把time_t改为64位整型。不过,其他现有架构的改动仍在进行中,不过预期“应该可以在2038年前完成”。然而,直到2012年,仍然有数以亿计的32位操作系统在运行中,特别是许多嵌入式系统。相对于一般电脑科技18至24个月的革命性更新,嵌入式系统可能直至使用寿命终结都不会改变。32位time_t的使用亦被编码于文件格式,例如众所周知的ZIP压缩格式。其能存在的时间远比受影响的机器长。

词条图册

更多图册

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/528300.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

苹果关掉200m限制_苹果下载大于200M限制

不用管它,点击好。然后按Home键(或上拉Home条)回到桌面,这时候你会看到你想下载的软件已经在桌面了,但是是灰色的,下面写着等待中,你不用理,点开 iPhone设置 -> 通用 -> 日期与时间 -> 自动设置(把…

重启计算机后桌面顺序是反的,Win10系统为什么重启电脑之后桌面上的图标排列顺序被打乱该如何处理...

导语:许多盆友发觉在应用Win10系统时,重新启动以后桌面图标越来越错乱,针对桌面图标不多的盆友而言还行,如果多的客户那简直十分烦闷的事儿,下面白豆芽就和大家分享Win10系统为什么重启电脑之后桌面上的图标排列顺序被打乱该如何处理。解决方法一:图标自…

boot lvm 分区_Linux如何在线对逻辑分区扩容

Linux如何在线对逻辑分区扩容1.前言目前绝大部分IaaS平台基本都会选择类似Vmware VsphereSAN存算分离的架构,或者选择类似Nutanix、Vmware Vsan或者深信服等存算一体的超融合架构。不管何种方式,都会遇到已挂载目录磁盘空间不足的情况,部分分…

计算机磁盘清理软件,清理磁盘空间的7种技巧,电脑装机、安装系统必备

随着技术的进行,硬盘变得越来越大,但它们似乎总是会装满。如果使用的是固态驱动器(SSD),它的空间比传统的机械硬盘要小得多,那就更是如此。如果你的硬盘空间不足,下面这些技巧可以帮助你清除硬盘上的垃圾,为…

攀爬网怎么取消_桂林旅游学院宿舍条件怎么样

大学就是我们的第二个家,高考填报志愿时,桂林旅游学院宿舍条件怎么样、好不好是广大同学和家长朋友们十分关心的问题,为了方便大家查询,大学生必备网已经为大家整理好了桂林旅游学院宿舍条件和宿舍图片,供大家参考。1、…

微信怎么绑定消息服务器吗,fastweixin: 极其方便的实现微信公众平台服务端开发,2行代码完成服务器绑定,3行代码实现用户消息监听...

fastweixin作者:peiyu快速搭建微信公众平台服务器简单封装了所有与微信服务器交互的消息:文本消息、图片消息、图文消息等等提供了基于springmvc以及基于servlet框架的控制器,集成了微信服务器绑定、监听所有类型消息的方法使用时继承,重写即可&#xff…

炒菜机器人放食材的顺序_如果给你个做饭机器人,你会让它做些什么饭菜?

我曾去过一个从事人工智能软件开发的工程师家里,进她家,从进门开锁、开灯、烧开水、泡咖啡、扫地机、蒸饭、炖汤、洗碗机等基本上实现了智能控制。我笑着说,如果再有个机器人帮你炒菜,你就实现“家务自由”了!现在唯独…

服务器中文件设置密码,共享服务器文件权限怎么设置密码

共享服务器文件权限怎么设置密码 内容精选换一换该步骤必须在root用户下执行,若以普通系统用户登录,需要执行su切换到root用户下执行后续操作。ssh-keygen -t rsa过程中需要:(可选)输入保存的文件名,默认为在/root/.ssh/id_rsa目录…

ajax定时器怎么写,js定时器怎么写?就是在特定时间执行某段程序

js定时器怎么写?就是在特定时间执行某段程序复制代码 代码如下:$(function(){var handler function(){}var timer setInterval( handler , 1000);var clear function(){clearInterval(timer);}});我要在定时里面加一个页面跳转,然后在页面load的时候加…

vue读取服务器文件跨域,新版vue-cli模板下本地开发环境使用node服务器跨域的方法...

背景我们都知道浏览器有一个既核心也最基本的安全功能,即同源策略。同源分别是:协议,域名,端口。如果浏览器访问服务器不同源的话,就会访问不到数据。那开发中常常访问的服务器不同源,那么可以借助一个服务器当做中介来…

一个账号可以登录几台机器_干货:一个PubMed账号可以有这么多用处!

且不说撰写一个综述类文章,就连平时的课题设计和汇报,都是动辄几十篇文献以上,那么,该如何管理这么多文献呢?笔者认为,一个PubMed账号足矣。我们都知道,在生物医药领域,PubMed这个文…

投票选举 算法_区块链主流共识算法一文全通

在每种伟大的加密货币背后,都有着一个伟大的共识算法。没有共识算法是完美的,但是它们各有千秋。在加密世界中,需要共识算法来防止重支付。这是迄今为止一些最流行的共识算法的简要介绍,从区块链到DAG以及介于两者之间的所有内容。…

clion 引用dll_用CLion实现本地方法并给java调用

众所周知,PHP是世界上最好的语言,java排第二,因为PHP无所不能。但是在某些场景下java还要调用本地方法来提高执行的效率,故java只能排第二。java提供了jni(Java Native Interface)来实现在java中调用本地方法。本地方法在java中用…

mysql没有创建数据库的权限设置_mysql 创建数据库,用户并给用户设置权限

mysql创建数据create database dataBaseName default charset utf8 collate utf8_general_ci; --创建数据库并设置字符集创建用户create user 用户名% identified by 密码; -- ‘%‘ 是该用户可以在任何机器上登录查询用户select user,host.password from mysql.user;给用户设置…

golang mysql封装_自己封装的golang 操作数据库方法

这个是我用Go写的第一个东东,可能还存在些BUG没有测试到。这里主要是提供一个参考。各位可以改写成自己的风格。在命令行下输入如下两条命令,进行安装go get github.com/male110/SimpleDbgo install github.com/male110/SimpleDbGo语言的数据库操作&…

mysql历史数据备份_Mysql存储过程历史表备份

原文:Mysql存储过程历史表备份应用背景SCADA采集系统需要将实时数据存入历史表。问题1:如何更简单的添加历史数据?2.海量历史数据,比如年数据,如何快速筛选 画曲线?利用mysql的事件,每小时存一次采集数据&a…

如何用js给图片重置宽_如何用js给老婆每天发情话

作者: 加百利真胖原文:https://juejin.cn/events/all一、引言最近家里添了小孩,在家带娃陪产了一些天,深刻体会到老婆带孩子的辛苦。工作的时候不能在家陪她,就想着写个程序,每天固定在固定时间给她发一些情话,好让她在…

世界手机号码格式_世界上手机号码最长的国家是中国,最短的是哪个国家?

现在手机普及率非常之高,基本上人手至少一个手机,那么哪个国家的手机号码最长呢?其实世界上最长的电话号码,是11位数的中国手机号码。为什么手机号码是11位呢?1、号码格式决定我们的手机号可以分为三段,都有…

dockers log查询dockers的文件_Tomcat PUT方法任意文件上传

漏洞背景:tomcat(7.0.0-7.8.1)服务器,开启了HTTP PUT请求方法,web.xml文件中的readonly值设置未false漏洞环境:使用vulhub环境,直接dockers安装安装成功:安装vulhub详见:https://vulhub.org/#/index/漏洞利…

vue替换全部符合’字符串_技术成长日记-Vim实用技巧-4.7查找替换

1. 普通查找/ 向下查找? 向上查找n 查找下一个目标字符串N 查找上一个目标字符串q/ 回溯查找历史,输入该命令后会在状态栏上方显示一个查找历史回溯窗口,如图4.1: 图4.1 回溯查找历史可以选择之前执行过的查找,也可以在最后一行回…