专栏首页五分钟学算法2038 ,程序员危机!

2038 ,程序员危机!

大家好,我是程序员吴师兄。

2038 年可能是程序员面临的一道坎,因为这关乎时间戳的问题。

今天就跟大佬唠嗑下这个事情。

文章选自维基百科:2000年问题和2038年问题,感兴趣读者可以自行阅读英文版,信息量更大一些。 整理人:小林 公众号:小林Coding

2000 年问题

千年虫问题,是指由于计算机程序设计的一些问题,使得计算机在处理2000年1月1日以后的日期和时间时,可能会出现不正确的操作,从而可能导致在2000年1月1日零点工作停顿甚至是发生灾难性的结果。

一般来说,由于计算机程序中使用两个数字来表示年份,如1998年被表示为98、1999年被表示为99,而2000年被表示为00。

这样将会导致某些程序在计算时得到不正确的结果,如把“00”误解为1900年。在嵌入式系统中可能存在同样的问题,这有可能导致设备停止运转或者发生更加灾难性的后果。

画外音:这个对于我们程序员来说很好理解,有时候不知道业务发展会怎么样,基于资源和当时的发展情况来考虑,设置空间余量不足,也是常有的事情。


2038年问题

UNIX操作系统是美国AT&T公司贝尔实验室于1969年完成的操作系统,最早Ken Thompson、Dennis Ritchie、Douglas McIlroy于1969年在AT&T贝尔实验室开发。

于1971年首次发布,最初是完全用汇编语言编写。后来在1973年用一个重要的开拓性的方法,Unix被丹尼斯·里奇用编程语言C重新编写,高级语言编写的操作系统具有更佳的兼容性,能更容易地移植到不同的计算机平台。

#ifndef __TIME_T
#define __TIME_T
typedef  long  time_t;
#endif

在32位系统中time_t实际是一个4字节的有符号长整型,其值表示为从UTC(coordinated universal time)时间1970年1月1日00时00分00秒到当前时刻的秒数。

由于time_t类型长度的限制,它所表示的时间不能晚于2038年1月19日03时14分07秒(UTC),那么当时间戳到达最大值2147483647会发生什么呢?

画外音:要理解2038年问题就必须要理解time_t和signed 32bit的计数。


2038-01-19 03:14:08

画外音:这好像还是个大事情,一下子回到了1901年……


32位操作系统

在计算机应用上,2038年问题可能会导致某些软件在2038年1月19日3时14分07秒之后无法正常工作。

所有使用POSIX时间表示时间的程序都将受其影响,因为它们以自1970年1月1日经过的秒数(忽略闰秒)来表示时间。

在大部分的32位操作系统上,time_t使用一个有正负号的32位有符号整数存储计算的秒数。依照time_t标准,在此格式能被表示的最后时间是2038年1月19日03:14:07,星期二(UTC)。

一旦超过这个时刻,时间将会绕回且在内部被表示为一个负数,并造成程序无法工作,因为它们无法将此时间识别为2038年,而可能会依个别实现而跳回1970年或1901年。因此可能产生错误的计算及动作。

我们来看下官方的警告:

画外音:官方警告最为真实…


64位操作系统

大部分64位操作系统已经把time_t这个系统变量改为64位,但是仍然有数以亿计的32位系统在运行中,特别是许多嵌入式系统。

32位time_t的使用亦被编码于文件格式,例如众所周知的ZIP文件压缩格式。其能存在的时间远比受影响的机器长。

新的64位运算器可以记录至约2900亿年后的292,277,026,596年12月4日15:30:08,星期日(UTC),基本上可以彻底解决时间回环问题。

画外音:换了64位 舒服了…


2038年问题的影响

2038年问题与之前的千年虫问题的杀伤力是不一样的,千年虫属于应用程序的问题,而2038年问题却是系统级的,有更大的杀伤力。

Linux Kernel 5.6 的开发者已经准备好着手解决将在下一个十年到来的 2038 年问题。Linux 5.6 也成为第一个为 32 位系统准备运行到 2038 年之后的主线内核。

至于像MySQL等组件同样面临2038年问题,目前还有17年的时候,我们相信可以应对这次危机。

画外音:还有17年呢,说不定那会儿我都退休了,改造的事情交给年轻人吧…

本文分享自微信公众号 - 五分钟学算法(CXYxiaowu)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-07-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 2038 年可能是程序员一场危机!

    千年虫问题,是指由于计算机程序设计的一些问题,使得计算机在处理2000年1月1日以后的日期和时间时,可能会出现不正确的操作,从而可能导致在2000年1月1日零点...

    小林coding
  • 技术分享 | MySQL 会受到“Unix千年虫“的影响吗

    爱可生 DBA 团队成员,负责公司 DMP 产品的运维和客户 MySQL 问题的处理。擅长数据库故障处理。对数据库技术和 python 有着浓厚的兴趣。

    爱可生开源社区
  • 聊一聊2038年问题

    庚子年是中国传统的 60 甲子纪年法。擅长观测的古人很早就发现,每当年份执行到庚子这一年,自然灾害变多,突发事件频频,一些震动世界、影响安定的大事件也容易发生在...

    出其东门
  • Java程序员背后的危机!

    近日网上有一篇关于Java程序员职场生存现状的文章“2017年 Java 程序员,风光背后的危机”,在Java程序员圈子里引起了广泛关注和热议。 ? 2017年...

    用户1667431
  • 程序员为什么要时刻保持危机感?

    假期回来,第一天上班,领导找我说,你的人都划入各个事业部,管理权也都放在各事业部,于是我就成了一个光杆司令,后续未知。

    程序员宝库
  • "2018年Java程序员,风光背后的危机"——你知道程序员的现状吗?

    近日网上有一篇关于Java程序员职场生存现状的文章“2018年 Java 程序员,风光背后的危机”,在Java程序员圈子里引起了广泛关注和热议。

    美的让人心动
  • "2019年Java程序员,风光背后的危机"——你知道程序员的现状吗?

    近日网上有一篇关于Java程序员职场生存现状的文章“2018年 Java 程序员,风光背后的危机”,在Java程序员圈子里引起了广泛关注和热议。

    美的让人心动
  • 程序员能纯靠技术渡过中年危机吗?

    靠技术99%的程序员都不行,因为99%的程序员技术都一般,考察你的技术的标准应该是不可替代性,如果公司里或者市场上找个人比你年轻,比你肯干,比你能加班,然后即便...

    IT架构圈
  • MySQL Case-时间问题导致MySQL实例批量宕机

    [ERROR] This MySQL server doesn't support dates later than 2038

    姚崇
  • 2018年Java程序员的现状,风光背后的危机!

    对于进可攻前端,后可守后端大本营的 Java 程序员而言,虽然供应逐年上涨,但是市场似乎对他们依然青睐有加。这些承担着技术招聘市场中高供给高需求的 Java 程...

    JAVA高级架构开发
  • 思考:程序员如何靠技术度过中年危机?

    这个世界本来就不是纯技术的,人到中年就应该学会承担责任和接受这个世界你改变不了的事情。这个世界不会总存在一个父母老师一样的角色,布置作业给你做然后你做好了给你糖...

    Java技术栈
  • 2018年Java程序员的现状,风光背后的危机!

    对于进可攻前端,后可守后端大本营的 Java 程序员而言,虽然供应逐年上涨,但是市场似乎对他们依然青睐有加。这些承担着技术招聘市场中高供给高需求的 Java 程...

    美的让人心动
  • 什么是2038问题?

    在这里,我给rawtime设置为10,从打印结果来看也知道是正确的了。(注意,由于我们的时区为东八区,所以得到的时间是八点。)

    编程珠玑
  • 史上导致数百万美元损失的10大计算机漏洞

    大数据文摘
  • ISO-8601 如何解读

    如下: 1970-01-01T00:00:00Z 可能是我们最常看到的格式了,这个表示的是一个 Epoch 时间,其实也不完全一定是,因为在上面没有表示出毫秒。

    HoneyMoose
  • 淘汰?不存在的!Java程序员如何避免职业危机

    Java行业在当下人才是供不应求,但是作为Java程序员的你也得居安思危,你要知道你身处的是一个高速变化的行业,稍不留意你的位置还是存在被取代的风险,那么对于一...

    美的让人心动
  • 为什么有些程序员悄无声息渡过35岁中年危机?

    今天分享是一些已经渡过中年危机的前辈们,看看从他们身上,是如何优雅的过渡的。如果想一直在程序这条路上走下去,建议读完。文章略长。 人物一:陈睿,前百度研发经理,...

    wangxl
  • 看Jetson TX2如何提高农作物产量

    每年,农民都在尽力减少因病害造成的作物损失。仅在2016年,大约有8.17亿蒲式耳的玉米因病害而损失。尽早识别和治疗这些病害会给农民带来很大的帮助,但是专家走遍...

    GPUS Lady
  • 一个奇怪的SQL问题

    (d_tinyint int not null default 1 comment "a",

    AsiaYe

扫码关注云+社区

领取腾讯云代金券