2038问题

2023-05-16

 

2038年一月19号,星期二,凌晨3点14分7秒钟的时候,如果Linux程序员会做恶梦的话,那么梦的内容一定是关于这个日期的,在这一秒钟滑过后,凡是安装着linux的计算机都会死机或者陷入死循环,这会给很多的数据库带来极大的麻烦。这个可不是那些反对linux的人胡编乱造得东东,而是linux自身的千年虫问题。

如果你想知道什么是2038问题的话,你需要知道一些技术上的东西。这个bug是由用来写linux的c语言引起的,c中用time_t来代表时间和日期,time_t是整数(int)型的,它用来记载从1970年1月1日到目前所经历的秒数。

这个数据是以32位存储的,第一位是符号位,其余的31位用来存数字,而这31位数字可以存储的最大数字为2147483647

从1970年开始计算,这31位的数字可以表示的秒数最多可以用到2038年,当时间到达这个数字的时候系统将会出现问题,到时候数字不会自动增加,而是会变为-2147483647,而这串数字代表的时间是1901年12月13号,这会导致很多的程序出现问题,甚至崩溃。

这个可比千年虫问题更具有破坏力,因为千年虫问题只会导致应用层的程序出现问题,比如信用卡支付系统,或者管理系统。而2038这个bug,将会影响系统最底层的时间控制的功能.

Raju Mathur,GNU 和 Linux的顾问兼Linux Delhi Users Group的斑竹,说:“我认为到时候首当其冲的将会是嵌入式领域,因为这个领域内的软件更新不是很频繁。流程控制系统,手机,游戏平台,电话的交换机等等这类的设备将会是最大的受害者。”

但是他后来补充道,以现在技术革新的速度,到时候估计不会有人还会使用32位的系统。

但是目前呢?很多运行在Linux上的程序可以计算到30年后的日期,对于抵押以及保险行业来说,可能在D-Day之前就会有问题出现。

Charles Assissi,Chip杂志的编辑说:“这个问题目前还不会让很多人惊慌,除了那些脾气不好的人”。

问题应该怎么分类解决呢?较新的Linux程序可以64位的或者更长的数据来表示时间,从而解决这个问题。对于现有的系统,可能c现在记录时间的方式将会被修改,然后所有的程序重新编译。作远远的要比说难得多。

Mathur 说:“如果没有上10亿行的代码在使用这个值的话,至少也有上百万行,找到它们,修改他们,升级嵌入式的系统,然后再重新部署,我认为是一项不可能的任务。”这会不会是另一个对于印度的开发团队来说很好的机会呢?

 

 

编辑本段32位进制导致2038年问题

前言

  
  

2038年问题演示

在计算机应用上,2038年问题可能会导致某些软件在2038年无法正常工作。所有使用 UNIX时间表示时间的程序都将受其影响,因为它们以自1970年1月1日经过的秒数(忽略闰秒)来表示时间。这种时间表示法在类Unix(Unix-like)操作系统上是一个标准,并会影响以其C编程语言开发给其他大部份操作系统使用的软件。在大部份的32位操作系统上,此“time_t”数据模式使用一个有正负号的32位元整数(signedint32)存储计算的秒数。依照此“time_t”标准,在此格式能被表示的最后时间是2038年1月19日03:14:07,星期二(UTC)。超过此一瞬间,时间将会被掩盖(wrap around)且在内部被表示为一个负数,并造成程序无法工作,因为它们无法将此时间识别为2038年,而可能会依个别实作而跳回1970年或1901年。错误的计算及动作可能因此产生。   “千年虫”解决之后,会不会有新的“虫”出现?回答是肯定的,“2038年”就是一个新的关卡。

正文

  网络时代,机会与危机共存,这也许是你我必须面对和必须付出的代价。“千年虫”解决之后,会不会有新的“虫”出现?回答是肯定的,“2038年”就是一个新的关卡。   也许大家都已经知道计算机的2000年问题是什么概念,但是什么时候又冒出来一个2038年问题的呢?   用C语言编制的程序不会碰到2000年问题,但是会有2038年问题。这是因为,大多数C语言程序都使用到一个叫做“标准时间库”的程序库,这个时间库用一个标准的4字节也就是32位的形式来储存时间信息。   当初设计的时候,这个4字节的时间格式把1970年1月1日凌晨0时0分0秒作为时间起点,这时的时间值为0。以后所有的时间都是从这个时间开始一秒一秒累积得来的。   比方说如果时间已经累积到了919642718这个数值,就是说这时距离1970年1月1日凌晨0时0分0已经过去了919642718秒,换算一下就应该是1999年2月21日星期天16时18分38秒。   这样计算时间的好处在于,把任意两个时间值相减之后,就可以很迅速地得到这两个时间之间相差的秒数,然后你可以利用别的程序把它换算成明白易懂的年月日时分秒的形式。   要是你曾经读过一点儿关于计算机方面的书,你就会知道一个4字节也就是32位的存储空间的最大值是2147483647,请注意!2038年问题的关键也就在这里———当时间一秒一秒地跳完2147483647那惊心动魄的最后一秒后,你猜怎么样?   答案是,它就会转为负数也就是说时间无效。那一刻的准确的时间为2038年1月19日星期二晚上03:14:07,之后所有用到这种“标准时间库”的C语言程序都会碰到时间计算上的麻烦。   这就是2038年问题。   但是大家也不用太过紧张。2038年问题比Y2K(Year 2000 Problem)[千年虫]问题解决起来相对要容易一些,只要给那些程序换一个新版本的“标准时间库”就可以了,比如说,改用8字节64位的形式来存储时间。这样做并不怎么费事,因为在C程序中“标准时间库”是相对独立的一个部分,里面的时间表达都有自己的一套时间类型和参数(而在碰到Y2K的那些大型主机中,时间格式大都没有一)。   说到这里,一些冰雪聪明的菜鸟DDMM们应该可以联想到,WindowsNT用的是64位操作平台,它的开始时间是1601年1月1日———但是它每过1个纳秒就跳一下,因此,WindowsNT它会碰到的是2184年问题……   而在一些用64位来表示时间的平台上,例如DigitalAlpha、SGI、Sparc等等,想要看到它们的时间出错你得等到天荒地老———那大概是292亿年。到那时,位于猎户座旋臂的太阳,已经是黑矮星或暗黑物质,猎户座旋臂已经被重力波震断,银河系大概则已经变成小型似星体了。   所以,给那些准备攒机的菜鸟DD一个建议,除非您想要把资料流传给下一个宇宙,一台64位的电脑已经足够。   总之,32位的最后时间是2038年1月19日03:14:07,星期二。   64位的最后时间约2900亿年后的292,277,026,596年12月4日15:30:08,星期日。

编辑本段解决进展

  目前并没有针对现有的CPU/操作系统搭配的简单解决方案。直接将POSIX时间更改为64位模式将会破坏对于软件、数据存储以及所有与 二进制表示时间相关的部份的二进位兼容性。更改成无符号的32位运算器(integer)则会影响许多与时间改变相关的程序。   大部份64位操作系统已经把time_t这个系统变量改为64位宽。不过,其他现有架构的改动仍在进行中,不过预期“应该可以在2038年前完成”。然而,直到2006年,仍然有数以亿计的32位系统在运行中,特别是许多嵌入式系统。相对于一般电脑科技18至24个月的革命性更新,嵌入式系统可能直至使用寿命终结都不会改变。32位time_t的使用亦被编码于文件格式,例如众所周知的ZIP压缩格式。其能存在的时间远比受影响的机器长。

编辑本段64位进制可解决问题

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

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2038问题 的相关文章

  • (下载)WinCE镜像传输工具ESHELL

    WinCE镜像传输工具ESHELL 使用这个可以不用装PB也可以传输镜像 xff0c 其实就是一个TFTP的传输 xff0c 适用于CE5 xff0c CE6 http download csdn net source 835336 不用资
  • I/O的控制方式——查询,中断,dma

    早期 xff0c I O串行 xff0c 查询方式 发展 xff0c I O并行 xff0c 两种方式其一是中断方式 xff0c 其二是dma方式 xff0c 使得外部设备能直接与主存储器信息交换 xff0c 减轻了cpu的工作量 技术继续
  • 关于WinCE下MC55使用Unimodem进行GPRS拨号,拨上出现断开连接,检查波特率的问题的另一种可能情况

    http www armce com bbs thread 59 1 1 html
  • WinCE上BINFS实现详解

    作者 wwfiney 64 ARMCE 网上不少介绍三星24x0系列的BIN FS启动方式实现 xff0c 有些内容上描述的不是非常全面 下面就WinCE6上的BINFS实现 xff0c 从基本原理 到修改BSP xff0c 再到如何烧录启
  • i.MX27支持8GBSDHC卡驱动修改

    最近需要给mx27加上SDHC驱动 以支持SDHC的SD卡 网上许多关于2440支持SDHC的文章 xff0c 借鉴很多 xff0c 但是由于MX27驱动的特殊结构 xff0c 需要做更多改动 xff0c 详细如下 xff1a 平台 xff
  • /etc/init.d/rcS文件详解

    我使用的简单rcS文件内容如下 最后的IP地址设定非常重要 xff0c 一定要跟服务器的地址再同一个网段 xff0c 不然会出现无法连接错误 nfs server 192 168 0 102 not responding still try
  • CAN通讯的byte序和bit序

    听别人说起CAN通讯协议的时候总说到Intel格式和motorola格式的时候 Intel格式如何 xff0c Motorola格式又如何 xff1f 觉得很有必要搞懂这些知识 xff0c 也看了相关资料 xff0c 可直到今天还没明白 真
  • ROS学习笔记(一):创建工作空间和功能包

    所有的ROS程序 xff0c 包括我们自己开发的程序 xff0c 都被组织成功能包 xff0c 而ROS的功能包被存放在称之为工作空间的目录下 因此 xff0c 在我们写程序之前 xff0c 第一步是创建一个工作空间以容纳我们的功能包 其实
  • PHP活动报名小程序系统源码 带后台管理程序

    活动报名小程序源码 xff0c 基于thinkphp开发的报名小程序源码 xff0c 带有后台管理 xff0c 用户发布活动信息 报名可以后台管理 xff0c 基本都还是可以的 不过需要注意的是 xff0c 用户注册部分是发送手机短信 xf
  • NVIDIA Jetson Xavier NX部署VINS-fusion-GPU

    组内大佬师兄今天抽出时间总结了一篇博客 xff0c 主要内容是 xff1a 把在阿木P450无人机上 xff0c 对自带的NVIDIA Jetson Xavier NX边缘计算机部署VINS fusion GPU教程 xff0c 并进行实验
  • 接口策略路由配置(通过流策略技术实现)

    策略路由 xff1a xff08 先于路由表 xff0c 且不会生成路由表 xff09 策略路由和路由策略都可以影响数据包的转发过程 xff0c 但他们对数据包的影响方式是不同的 本地策略路由 xff1a 仅对本机 下发的报文进行处理 xf
  • Mac Xcode崩溃 (打开ios项目引起崩溃)

    bug xff1a 每次打开此工程都会导致Xcode崩溃 其他工程没有问题 解决办法 xff1a 1 确定本地跟服务器没有需要更新和提交的代码 2 把本地工程移到废纸篓 3 从新check out工程 4 新工程完美运行 xff08 这样没
  • Mac上VScode使用clang-format格式化c++代码

    一 安装 需要安装插件c c 43 43 xff0c 不推荐使用clang format这个插件 xff0c 毕竟c c 43 43 里面已经支持了clang format格式化操作 安装这个clang format插件也有一个好处 xff
  • C#解决串口通信中接收数据时延迟处理与缓存处理的方法

    C 解决串口通信中接收数据时延迟处理与缓存处理的方法 时间 2011 1 21 14 04 29 来源 www cnblogs com 作者 杨少宁 利用串口进行通信 xff0c 当发送方 xff08 A xff09 将数据写入串口后 xf
  • 在gazebo中对机器人进行控制,并在rviz中同步显示

    在上一篇博客中 xff0c 我一步一步地建立了在gazebo仿真中能用的xacro文件 但是仿真时的模型是自由摆动的 xff0c 文末的时候我想对他进行控制 xff0c 但是篇幅太长 xff0c 所以新开一篇 参考ros control的内
  • 基于esp32-cam的监控小车

    1 购买器材 xff1a Eap32 cam L289N直流步进电机驱动 自锁开关 两节18650电池 5v电源 杜邦线若干 2 程序代码 2 1 下载代码 下载库函数 百度网盘 xff1a 链接 xff1a https pan baidu
  • APP Inventor -环境安装

    APP inventor可以实现直接在网页上操作 1 登录网址 xff1a http ai2 17coding net xff08 我使用的是微软浏览器 xff0c 用谷歌打开时显示无法登录 xff09 选择一键试用 2 下载Ai伴侣 xf
  • App inventor—安安机器人

    1 准备素材 2 程序设计 3 程序编程 3 1 3 2 3 3 总结 xff1a 1 换背景图片的时候 xff0c 设置图片 gt 用文本来存放图片的名称 xff08 特别注意后面的png xff0c 是图片的格式 xff09 2 手机震
  • 按键控制LED灯亮灭——基于arduino单片机

    程序设计 xff1a 函数 xff1a digitalRead 作用 xff1a 用来读取数字串口状态 xff0c HIGH还是LOW xff08 其实还有一种表达方式就是HIGH是 1 LOW是 0 xff0c 只是HIGH LOW更直观

随机推荐

  • JDY-31 蓝牙模块使用(HC-06)

    波特率要相同才能就行通讯 下载串口调试工具 打开串口调试工具 xff0c 配置参数 蓝牙连接 VCC 3 3V GND GND TXD RXD RXD TXD 配置蓝牙参数 发送指令 xff0c 要在指令后面添加 r n xff0c 或者让
  • arduino驱动LD3320语音识别模块

    LD3320 xff1a LD3320 是一颗基于非特定人语音识别 xff08 SI ASR xff1a Speaker Independent Automatic SpeechRecognition xff09 技术的语音识别 声控芯片
  • 无人机学习笔记之电池篇

    电池参数 电池的多少mAh 表示电池容量 xff0c 如1000mah电池 xff0c 如果以1000ma放电 xff0c 可持续放电1小时 如果以500mA放电 xff0c 可以持续放电2小时电池后面多少C 代表电池放电能力 这是普通锂电
  • 指纹锁—AS608指纹模块

    目录 一 工程内容 二 AS608指纹模块使用 1 AS608 与 USB转TTL模块 的接线 2 上位机配置 3 AS608与STC12C60A通讯 三 驱动MG995 xff08 180度舵机 xff09 1 MG995舵机数据手册 2
  • 手把手使用Python语音识别,进行语音转文字

    目录 0 太长不看系列 xff0c 直接使用 识别结果 1 Python调用标贝科技语音识别接口 xff0c 实现语音转文字 1 1 环境准备 xff1a 1 2 获取权限 1 2 1 登录 1 2 2 创建新应用 1 2 3 选择服务 1
  • python编译问题—Traceback (most recent call last): File “E:\python\pythonProject\文件读取.py“, line 3, in <

    Traceback most recent call last File 34 E python pythonProject 文件读取 py 34 line 3 in lt module gt f 61 open r 39 D 测试 tex
  • Python爬虫——爬取搜狗页面

    直接上代码 xff01 xff01 xff01 usr bin env python coding utf 8 8 需求 xff1a 爬取搜狗首页的页面数据 import requests if name 61 61 34 main 34
  • 数据结构-删除排序数组中的重复项

    class Solution public int removeDuplicates vector lt int gt amp nums int n lenght lenght 61 nums size 获取数组长度 if lenght 6
  • linux学习-虚拟机下载

    虚拟机下载 xff1a https www vmware com cn products workstation pro html 安装完成后 检测网络适配卡 xff1a 选择系统下载 OK
  • 硬件MSB最高位优先、LSB最低位优先的CRC计算原理详细解释和程序,正算反算成功等效,DS18B20和HTU31D传感器CRC

    wxleasyland 64 139 com 2022 7 以前写过 我学习CRC32 CRC16 CRC原理和算法的总结 xff08 与WINRAR结果一致 xff09 长篇 经过十几年又忘记了 这次碰到DS18B20进行CRC校验 xf
  • android4.4上sd卡的读写权限

    Google去年11月正式发布了Android 4 4 xff0c 代号为KitKat xff08 奇巧 xff0c 雀巢的一款巧克力品牌 xff09 xff0c 该系统带来了诸多新的特性 但需要注意的是 xff0c 该系统可能会让你之前一
  • android时间控件

    原文地址 xff1a http www 360doc com content 14 0617 16 18203124 387517665 shtml 前言 这一篇博客分别讲解Android平台下 xff0c 关于日期和时间的几个相关控件 包
  • Android开发-API指南-<application>[原创译文]

    转载地址 xff1a http blog sina com cn s blog 48d491300100zmga html lt application gt 英文原文 xff1a http developer android com gu
  • 新入职项目经理务必避免的七个常见错误

    在国内 xff0c 好多项目经理都是技术专家出身 xff0c 所以标题给了 34 新入职 34 由于旧习惯 xff0c 身上可能存在众多需要改进的地方 一 不明确自身的职责 你不在是个码农 xff1f 公司聘请你不是为了让你去写代码 xff
  • How Android Handles Touches

    Touch System overview Touch Event Framework Custom Touch Handling System Provided Touch Handlers System Provided Gesture
  • MFCC特征介绍

    MFCC特征介绍 在语音识别技术中 xff0c 需要提取音频的特征 xff0c 然后就可以使用该音频进行模型的训练或者是进行识别 xff0c 目前很常用的一种特征叫做MFCC特征 xff0c 又叫做梅尔倒谱系数特征 MFCC特征保留了语义相
  • 字符串大小比较问题

    首先 字符串比较函数 xff1a strcmp xff08 字符串1 字符串2 xff09 xff1b 其使用规则为 xff1a 若字符串1和字符串2相等 xff0c 返回0 若字符串1大于字符串2 xff0c 返回一个正整数 43 1 若
  • OBS 录制没有声音怎么办?

    1 检查obs设置 音频 是否是默认选项 2 检查win10 是否允许使用麦克风 1 xff09 右下角出现麦克风标识 2 xff09 设置 隐私 麦克风 xff0c 查看允许放开你的麦克风是否打开 如果上述还是为解决问题 xff0c 那么
  • android.os.deadObjectException异常

    deadObjectException异常 xff0c 说明应用的service已经停止 xff0c 要么是从操作系统中丧生 xff0c 要么从应用程序中终止
  • 2038问题

    2038年一月19号 xff0c 星期二 xff0c 凌晨3点14分7秒钟的时候 xff0c 如果Linux程序员会做恶梦的话 xff0c 那么梦的内容一定是关于这个日期的 xff0c 在这一秒钟滑过后 xff0c 凡是安装着linux的计