- 最后登录
- 2022-10-30
- 金钱
- 6719
- 注册时间
- 2014-5-3
- 阅读权限
- 90
- 帖子
- 3546
- 精华
- 6
- 积分
- 6621
副教授
  

|
1970年1月1日,是一个十分重要的日子。因为,这是UNIX时间的基准。
简单说下什么是UNIX时间。搞编程的朋友们肯定知道。1970年1月1日的0点到某时刻的总秒数,就是UNIX时间。要注意的是,这个0点,是以UTC 0规定的。打下这句话的瞬间,是美国中部时间下午4点45,用UNIX时间表示就是1455662701。也就是说,从1970年1月1日的0点开始,到现在,总共经过了这么多秒。
再说说时区,目前时区换算都靠UTC(Coordinated Universal Time)。美国本土是UTC-5~-8(不考虑海外领土、夏威夷、阿拉斯加、关岛、波多黎各、萨摩亚、北马里亚纳群岛)。中国的时区是UTC+8。
那么UNIX这个bug是怎么回事儿?为了叙述方便,咱们后面全用美东标准时间(UTC-5)来说。标准时间意思就是不考虑夏令时什么的问题。
如果我们把手机时区调成美国,然后调成1970年1月1日0点(UTC-5),那么对应的UTC 0是1970年1月1日5点。得到的时间戳应该是0000018000。然而,如果在国内,调成1970年1月1日0点(UTC+8),那么对应的UTC 0是1969年12月31日下午4点。这个时间早于UNIX时间的基准。由于UNIX时间戳(time stamp)不允许负数,所以会导致系统无法启动(只是一个猜测,但多半应该是因为这个吧。讲道理的话这种情况是可以避免的)。
当然,这不保证在美国的小伙伴们可以随便试。为什么苹果官网会说不要调到5月之前呢?说好的1月1日呢?因为日历也有不同的历法。咱们每天用的叫Gregorion,iPhone支持的还有Japanese,和Buddhist。另外还有Hebrew,Chinese(就是农历,Lunar Calendar)。我是没想出来为什么会说5月,因为这并不是一个什么时间点(唯一能想到的就是我五月过生日=。=),只是感觉和这个应该有关。所以Apple这么说,应该是为了防止你一不小心把日期退回到了1970年1月1日之前。
简而言之,只要你保证不把UNIX时间戳退回到0000000000之前,也就是UTC 0 的1970年1月1日0点之前,就不会出问题。
然而,我们为什么要尝试?=。=
P.S. 有兴趣的朋友们还可以去看看2038问题,是32位系统到2038年的1月某天(具体时间不记得了)会把UNIX时间归零。解决方法?换64位系统呗!只是,谁能保证自己现在的电脑用到2038年?。。。
道理大概就是这样,或者说很可能是这样。再次劝大家一句,别试了。理论上重启是没用的。。因为进不去系统。DFU也解决不了。倒是有一种能解决的方式,只是很麻烦,真的不值当的。为了防止大家尝试,就不在这儿说了。
|
|