为什么苹果时间只能到2038年
⑴ 手机日期只能设置到2038年这背后有个大问题……
世界末日到底是哪一天?这个无厘头的问题一直有着各种各样的离奇答案。当你打开手机,关闭自动设置时间,往未来的方向滑动数字时,你会发现时间停在了2038年。
不仅是手机,在电脑上,当你尝试将时间从2037年再往上调整时,会发现不管怎么按设置按钮,日期都不会继续改变。
2038年到底会发生什么?为什么各种设备都无法“逾越”2038年?在网上搜寻2038,你还能发现有人专门设置了倒计时网页。这其中包含了一个更加精确的时间: 2038年1月19日 3点14分7秒 。而下一秒,你的电子设备将会 穿越回到1901年 。
着名的 “2038问题” ,将在此刻爆发。
问题发生在2038年1月19日 3点14分7秒的下一秒。这一天的03:14:08不会到来, 迎接你的将会是 1901年12月13日20:45:52 。
对于很多电子设备而言,这是个毁灭性的打击。文件的创建与修改、应用软件的运行、网络系统的同步…… 时间作为一个关键数值,在整个电子系统里起着绝对重要的作用 。因此有一阵子苹果手机的语音助手Siri,还把这一天当成了“世界末日”。为什么是这一天?Siri回答中的关键词也给出了答案。
Unix、32位,这两个词让2038年的这一天注定成为末日。Unix是一种操作系统,这种系统中计时方式是以1970年1月1日 00:00:00为基准,按秒为单位进行增减。比如到2022年1月1日0点,只需要 用基准值加上1640966400秒 。而我们现在使用的安卓、苹果系统都属于类Unix系统,采用了同样的方案。
电子系统使用0和1对数据进行储存,也就是二进制。如果只用1位数,只能表示0和1,如果2位数,则可以用00、01、10、11分别表示0、1、2、3这四个数。随着位数的增加,二进制可以表示的数也越来越大,但总会遇到上限。如果用32个0、1储存数字,第一位表示符号, 0代表+,1代表- ,则剩下31位 最大可以表示2147483647 。在计算机资源非常宝贵的年代,用32位来放置时间,已经很够用了。
1970年1月1日00:00:00 + 2147483647秒 = 2038年1月19日 3点14分7秒。 下一秒,数据就会出现“装不下”的情况,发生溢出 。此时第一位符号位从0变成1,本来的加号变成了减号,时间突然穿越到过去。
(从上到下分别是二进制秒数、对应的十进制秒数、32位Unix系统时间、实际时间。超过2147483647后,符号位会变成1(负号),整个数字会突然发生翻转,回到1901年。)
这个存在于将来的问题,它会给我们带来怎样的影响?回溯过往, 一次又一次的“千年虫”问题已经给了我们一些预告 。
2000年,千禧年。而在很多应用程序看来, 这一年会变成1900年 。
同样因为硬件资源宝贵,早期程序使用了年份的后两位数字来表示日期,而 前两位数都默认为19 。这个不起眼的时间问题,在整个世界引发了巨大的关注。政务系统、银行系统、航空系统等多个系统都可能受到影响而失效。全球各地对这一问题进行了响应,试图解决这一问题。我国多次发文强调这一问题的重要性。美国也推出了有关千年虫问题的法案,以敦促各行业共享信息解决此类问题。
多亏人们对“千年虫”的高度重视,使得这一问题在集中爆发前得以解决。但在此之后,类似“千年虫”的事件却依然层出不穷。
2010年的第一周,德国约3千万张银行卡同时“失效”。持卡人不仅无法直接刷卡消费,连在自动取款机上取钱都成问题。这不仅影响了本国居民的生活,也使得在外度假的德国人滞留在当地。
由于不同编码方式存在差异, 2010在德国的银行系统中被错误地识别成2016 。银行卡也因此“被过期”了。同样的情况出现在使用Windows Mobile系统的手机上: 你在2010年第一天收到的新年短信,会被系统显示成2016年 。
德国加速修复了银行系统,所幸没有造成更大的损失。但放眼太空,事情就没那么简单了。2013年9月,航天器Deep Impact突然失联,迫使美国航空航天局宣布相关探测任务正式结束。Deep Impact的首席任务科学家 Mike A'Hearn认为,这是一个“千年虫问题”。 航天器的部分软件无法正确识别2013年8月11日之后的日期,导致计算机不断重启 。最终,科学家们失去了航天器的信号。
就在今年年初,“2022年虫”让微软的程序员体会了新年大加班。1月1日,微软的邮件服务系统Exchange突然中断,使用该服务的用户都无法发送电子邮件。 微软随后给出了声明,称该问题与日期检查失败以及新年的变化有关 。简单点说,和2038问题一样,时间“溢出”了。好在微软团队加班加点,在当天解决了该问题。
在未来,“类千年虫”问题一定还会出现。对于可以预料的问题,人们已经开始尝试提供解决方法。比如使用新的格式存储时间信息。与此同时,系统团队提供的新内核也在解决32位平台上的“ 历史 问题”。你也不用太担心,毕竟到那时,你应该已经换了好几波手机了。
不过,再遇到类似的突发Bug也很正常。 因为世界上总在发生情理之中、意料之外的事情 。
参考文献
[1]Year 2038 Problem Countdown. https://gregnk.com/2038/
[2]The Project 2038 Frequently Asked Questions (FAQ). http://www.deepsky.com/~merovech/2038.html#What_operating_systems_and_platforms_are_affected_by_it
[3]Why does Siri say the world will end on January 2038? https://www.quora.com/Why-does-Siri-say-the-world-will-end-on-January-2038
[4]Unix time. https://en.wikipedia.org/wiki/Unix_time
[5]Unix Time Stamp - Epoch Converter. https://www.unixtimestamp.com/
[6]Unix-like. https://www.computerhope.com/jargon/u/unix-like.htm
[7]2038年问题. https://zh.wikipedia.org/wiki/2038%E5%B9%B4%E9%97%AE%E9%A2%98
[8]中国解决计算机2000年问题的进展情况. http://www.scio.gov.cn/xwfbh/xwbfbh/wqfbh/1999/1201/Document/328000/328000.htm
[9]话说“千年虫”. http://www.people.com.cn/item/hs2000/july.html
[10]Clinton Urges Americans To Act On Y2K Problem. https://edition.cnn.com/ALLPOLITICS/1998/07/14/clinton.y2k/
[11]Y2K-type bug hits German cash, credit cards. https://www.eetimes.com/y2k-type-bug-hits-german-cash-credit-cards/
[12]Carry cash as well as a card, says German bank association. https://www.computerworld.com/article/2759697/carry-cash-as-well-as-a-card--says-german-bank-association.html
[13]Windows Mobile Bug Dates Messages from 2016. https://www.wired.com/2010/01/windows-mobile-bug-dates-messages-from-2016/
[14]NASA Declares End to Deep Impact Comet Mission. https://www.nationalgeographic.com/science/article/130920-deep-impact-ends-comet-mission-nasa-jpl#:~:text=NASA%20officials%20declared%20the%20Deep,July%204%20of%20that%20year.
[15]Exchange Year 2022 Problem: FIP-FS Scan Engine failed to load – Can’t Convert “2201010001” to long (2022/01/01 00:00 UTC). https://borncity.com/win/2022/01/01/exchange-fip-fs-scan-engine-failed-to-load-cant-convert-2201010001-to-long-1-1-2022/
[16]Email Stuck in Exchange On-premises Transport Queues. https://techcommunity.microsoft.com/t5/exchange-team-blog/email-stuck-in-exchange-on-premises-transport-queues/ba-p/3049447
作者:Owl
编辑:窗敲雨
科学审核:Andrija
本文来自果壳,未经授权不得转载.
如有需要请联系[email protected]
⑵ 苹果6plus手机时间调整不了,不显示图片,还老是2038年怎么办
1、首先你要把手机“定位”功能开户了,我们在桌面“设置--->隐私--->定位服务”可以了
⑶ iphone6调日期为什么只能调到2038年
不光iPhone6,所有手机都只能调到2038年,详情看右边的链接→_→http://g.pconline.com.cn/bbs/topic-9983673.html
⑷ 苹果手机时间调不了了,还老显示是2038年怎么办
把它设置成网络自动对时
⑸ 苹果6plus手机时间调整不了,不显示图片,还老显示是2038年怎么办
主要是手机使用时间长,系统不稳定造成的。
1.打开手机设置选择通用。
2.选择清除所有设置。
⑹ ios15日期只能调2038
ios15日期只能调2038年。不仅是苹果手机,其他品牌手机也是这样的,而且在电脑上也是这样的。
2038年到底会发生什么?为什么各种设备都无法“逾越”2038年?在网上搜寻2038,你还能发现有人专门设置了倒计时网页。其实是因为我们这些系统都是采用二进制。
⑺ 苹果ios设备日期设置到1970年变砖怎么办
摘要:最近在网上沸腾的iOS时间bug闹的沸沸扬扬,据说是将iOS系统时间修改为1970/1/1,重启后系统将永远无法开机。那么这个事情是真的吗?如果是真的有什么合理的解释吗?想要真正了解这一bug,您可能需要以下知识。
UNIX时间戳
在确认这件事情的真假前,你需要了解的一个知识是Unix时间戳。
iOS系统时间使用Unix时间戳(Unix epoch)表示(time_t数据类型)。在系统中,使用系统位数个二进制位储存时间。
Unix时间戳规定,UTC时区的1970年1月1日 0点0时0秒的值为0,以秒为单位,即每过一秒,二进制数字加1。
不能往前调,那我把时间往后调
有些好奇的朋友拿出了自己手机,心想:既然我不能往回调,那我要是把时间使劲往后调能怎样?
细心的朋友发现了一个问题,iOS系统可以设置的最大时间是2038年1月1日,并不能再往后设置。苹果一定考虑到了这个问题,为什么这么说呢?
我们拿32位系统举例。在32位系统中,time_t是长度为32位的,有符号整数(signed int)类型。首个二进制位是符号位,用来储存正负。正数则为1970/1/1以后的时间,负数反之;其余的31位用来记数。当时间到达2038年1月19日 3时14分08秒时,数值位全部向前进1,导致符号位被置1,其余31位为0。介时,将出现‘时间回归’的情况,系统时间变为1901年12月13日 20时45分52秒,系统将会出现错误。
所以Apple为了避免这种问题导致的错误发生,将最大时间期限定在了2038年1月1日 23时59分59秒。这样即使超出这个范围,在18天内也不会有太大问题,况且32位设备到那个时候基本都已经淘汰了。
64位系统会不会受到这个影响呢?通过计算我们可以得到,292,277,026,596年12月04日 15时30分08秒是64位系统可以表示的最大时间。
如果你想了解更多关于32位系统在2038将出现的问题,请移步: Year 2038 problem。
64位处理器的‘时间回归’问题
有了刚才的知识储备,现在我们回到正题,开始探讨搭载64位处理器设备的时间bug。
我们说到了以UTC时区的1970年1月1日 0点0时0秒为界限,数值为0,时间正常流逝为正数,反之为负数。不过各位需要留意的是,时间受到时区的影响。
假设一种情况,我原来是北京时区,假设将时间设置到了1970年1月1日 0点0时0秒,那么我将这个时间转换为UTC时间,公式:北京时间 = GMT+8 = UTC+8,那么UTC时间则为1969年12月31日 16时0分0秒。这样就会出现时间负值,即时间回归bug触发,系统启动卡在Kernel阶段,时间错误,无法继续进行启动。
触发bug条件与表现
满足以下条件,‘时间回归’bug被触发:
系统版本:iOS 8.0 ~ iOS 9.3 beta 3
硬件设备:搭载64位处理器的设备(即处理器为A7~A9X的设备)
进入‘设置’-‘通用’-‘时间与日期’,关闭‘自动设置’,并将时间修改为1970年1月1日,分秒任意。
修改时间后,需要重启设备。
Bug触发表现:iOS设备启动时,卡在苹果Logo,无法继续启动。
解决方案
针对所有64位处理器的iOS设备
拆机并拆出电池,放置10分钟后重新安装。
电量充足的情况下,等待数小时,当Unix时间戳的数值大于等于0,系统时间生效,可正常开机。
针对已越狱设备的防范
1、添加Cydia源 http://repo.ziph0n.com/
2、并安BrickingDate插件
注意:此插件只可以防止人为修改时间,并无法防止代码恶意篡改时间(安装效果如下图)。
Bug危害分析
黑客可以利用此bug通过无线局域网发出范围性攻击。
当iOS设备连接到公共网络时,iOS系统将会使用NTP服务对时区、时间进行校准。如果黑客发送恶意的NTP攻击,将iOS系统时间校准至UTC < 0的时间,那么所有用户设备均会受到此bug影响,在重新启动设备后无法使用设备。
引用链接:
http://digi.163.com/16/0214/09/BFPB66GE00162OUT.html
⑻ 苹果6plus手机时间调整不了,不显示图片,还老是2038年怎么办
1、首先你要把手机“定位”功能开户了,我们在桌面“设置--->隐私--->定位服务”可以了
2、设置时间。
然后我们再回到iphone6桌面点击“设置--->通用--->日期与时间”
注意:有些朋友是把定位关了而自己又没设置自己所在区所以时间就显示不对了哦。
⑼ iphone把时间调到1970年1月1怎么变回来
先来简单说一下这个Bug触发时的表现,如果用户进入【设置】—【通用】—【时间与日期】,关闭【自动设置】,并将时间修改为1970年1月1日,分秒任意。修改时间后,需要重启设备。然后该设备启动时,则会卡在苹果Logo,无法继续启动。
iPhone时间调到1970年1月1日变砖Bug原理:
说到IOS时间Bug,则必须要介绍一下Unix时间戳,IOS系统时间是使用Unix时间戳(Unix epoch)表示(time_t数据类型)的。Unix时间戳规定,UTC时区的1970年1月1日 0点0时0秒的值为0,以秒为单位,即每过一秒,二进制数字加1。
以32位系统为例,在32位系统中,time_t是长度为32位的,首个二进制位是符号位,用来储存正负。正数则为1970/1/1以后的时间,负数反 之;其余的31位用来记数。当时间到达2038年1月19日3时14分08秒时,数值位全部向前进1,导致符号位被置1,其余31位为0。此时,将出现 【时间回归】的情况,系统时间变为1901年12月13日20时45分52秒,系统将会出现错误。为了避免这个错误,苹果将最大时间设定为2038年1月 1日23时59分59秒。而64位系统的最大时间限额将为292,277,026,596年12月04日15时30分08秒,基本可以说是不受这个限制的 了。
知道上面这个知识点后,我们再来说一下时区对时间的影响,大家都知道,我们所在的时区是【北京时区】,假如我们将时间设置在1970年1月1日0点0时0 秒,北京时间=GMT+8=UTC+8,UTC时间则为1969年12月31日16时0分0秒。这样就会出现时间负值,即时间回归bug触发,系统启动卡 在Kernel阶段,时间错误,则无法继续进行启动。
iPhone时间调到1970年1月1日变砖触发该bug条件与表现:
满足以下条件,‘时间回归’bug被触发:
系统版本:IOS 8.0 ~ IOS 9.3 beta 3
硬件设备:搭载64位处理器的设备(即处理器为A7~A9X的设备)
进入‘设置’-‘通用’-‘时间与日期’,关闭‘自动设置’,并将时间修改为1970年1月1日,分秒任意。
修改时间后,需要重启设备。
Bug触发表现:IOS设备启动时,卡在苹果Logo,无法继续启动。
iPhone时间调到1970年1月1日变砖解决办法:
对于所有64位系统,需要拆机,并拆出电池,放置一段时间后,重新安装即可。如果电池电量充足,等待数小时,当Unix时间戳的数值大于等于0,系统时间生效,可正常开机。
需要提醒大家的是,当IOS设备连接到公共网络时,IOS系统将会使用NTP服务对时区、时间进行校准。如果黑客发送恶意的NTP攻击,将IOS系统时间校准至UTC小于0的时间,那么所有用户设备均会受到此bug影响,在重新启动设备后无法使用设备。
⑽ 苹果手机怎么把时间调到2035年以后,现在显示,只有2034年
这是手机的一个程序设定没办法更改的等下次系统更新了之后一直要系统升级他就可以调到以后了。