【生意多】-免费发布分类信息
当前位置: 首页 » 新闻 » 教程 » 正文

苹果1970事件到底是个什么鬼 如何解决苹果1970事件

放大字体  缩小字体 发布日期:2020-07-13 21:06:58    浏览次数:6
导读

  近日,苹果“1970 事件”闹得沸沸扬扬,有许多使用iOS设备的好奇人士“好奇害死猫”,抱着好奇的态度,结果自己的爱机真的变砖了。据了解,运行iOS 8以上系统的64位处理器的设备几乎无一幸免,把iPhone、iPad或iPod touch的时间设定为1970年1月1日,然后关机再开机,手机就变成一块“砖头”。下面让我们看看“1970”到

  近日,苹果“1970 事件”闹得沸沸扬扬,有许多使用iOS设备的好奇人士“好奇害死猫”,抱着好奇的态度,结果自己的爱机真的变砖了。据了解,运行iOS 8以上系统的64位处理器的设备几乎无一幸免,把iPhone、iPad或iPod touch的时间设定为1970年1月1日,然后关机再开机,手机就变成一块“砖头”。下面让我们看看“1970”到底是什么“鬼”。

  在了解“1970年事件”时,我们需要了解一个知识就是Unix时间戳。iOS系统时间使用Unix时间戳(Unix epoch)表示(time_t数据类型)。在系统中,使用系统位数个二进制位储存时间。Unix时间戳规定,UTC时区的1970年1月1日0点0时0秒的值为0,以秒为单位,即每过一秒,二进制数字加1。

  有了这个知识储备,我们现在了解一下搭载64位处理器的iOS设备的时间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阶段,时间错误,无法继续进行启动。

  那么既然事件不能往前调,好奇的朋友可能会往后调,当我们往后调的时候会发现iOS系统可以设置的最大时间是2038年1月1日,并不能再往后设置了。为什么时间只能调到这里?

  我们了解一下在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秒,系统将会出现错误。

  每日头条、业界资讯、热点资讯、八卦爆料,全天跟踪微博播报。各种爆料、内幕、花边、资讯一网打尽。百万互联网粉丝互动参与,TechWeb官方微博期待您的关注。

 
关键词: unix时间戳
(文/小编)
打赏
免责声明
• 
本文为小编原创作品,作者: 小编。欢迎转载,转载请注明原文出处:http://www.31duo.com/news/show-377674.html 。本文仅代表作者个人观点,本站未对其内容进行核实,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,作者需自行承担相应责任。涉及到版权或其他问题,请及时联系我们。
 

(c)2016-2019 31DUO.COM All Rights Reserved浙ICP备19001410号-4

浙ICP备19001410号-4