编辑:[db:作者] 时间:2024-08-25 02:50:09
问题复现
1970-01-01对付开拓者来说都是不陌生的,有些系统对付韶光的处理如果不足好的话,就可能把韶光显示成1970-01-01,以是常常有用户看到1970-01-01这个韶光。
这种情形实在是很大略就可以复现的,当我们考试测验利用以下Java代码定义韶光:
Datedate=newDate(0);System.out.println(date);
打印出来的结果:
ThuJan0108:00:00CST1970
通过Date的布局函数的Java Doc解释我们也能得到一些蛛丝马迹:
该布局函数吸收用户指定一个毫秒数,如new Date(1000),表示得到一个间隔"epoch"有1000毫秒的韶光。在Java中,这个韶光是1970, 00:00:00 GMT。
韶光戳
统统要从Unix操作系统出身开始提及。
1969年8月,贝尔实验室的程序员肯汤普逊利用妻儿离开一个月的机会,开始动手创造一个全新的革命性的操作系统,他利用B编译措辞在老旧的PDP-7机器上开拓出了Unix的一个版本。
随后,汤普逊和同事丹尼斯里奇改进了B措辞,开拓出了C措辞,重写了Unix,新版于1971年发布。
在Unix被发明出来之后,须要在Unix上表示韶光,就须要想办法定义一个能表示一份数据在某个特定时间之前已经存在的、完全的、可验证的数据来表示韶光。
于是,Unix韶光戳被定义出来,即通过当前韶光和一个"纪元韶光"进行比拟,其间相差的秒数作为韶光戳。
为了让Unix韶光戳表示韶光这种办法用的尽可能久,最初就把Unix出身的韶光1971-1-1定义成"纪元韶光"。
韶光戳修正
除了开始韶光是1971-1-1而不是1970-1-1外,最初的韶光戳也不是每增加1秒韶光戳就变动一次,而是每1/60秒都会改变一次韶光戳。
其余,Unix是在1971年发明出来的,当时的打算机系统是32位,如果用32表示有整数,那么最大值是2147483647(2^31-1)。
那么,大略做一个数学打算,如果用当时的韶光戳打算办法来表示韶光的话,Unix韶光戳最多可以利用4294967296/(606024)/60 = 828.5天(一天有606024秒,每1/60秒会占用一个韶光戳)。
想象一下,设计出一个打算机系统,他的韶光只能表示 828.5天,是不是很难让人接管,但是最初的Unix确实是这样的。
后来,Unix的开拓者们也逐渐意识到这样不是长久之计,于是开始做出改变。
最开始,他们将每1/60秒改变一次韶光戳修正成每1秒改变一次韶光戳。这样韶光戳可以表示的韶光就又放大了60倍。这时候有828.560/365 = 136年。
这时候,一方面136年已经足够久了,纪元韶光轻微向前调一下影响也不大。其余一方面为了方便影象和利用。
于是就把纪元韶光从1971-01-01调度到1970-01-01了。
于是,随着后面各种开拓措辞的出身,就都沿袭了1970-1-1这个设定。
以是,常日我们说的韶光戳,便是指格林威治韶光(GMT)1970年01月01日00时00分00秒起至现在的总秒数。
纪元韶光与时区
我们前面所提到的纪元韶光的设置,都是基于格林威治标准韶光的,即GMT韶光。
但是天下上各个地区有自己的时区,都须要基于GMT韶光进行调度。
1970-01-01 08:00:00的显示显然是受到了时区《如何给女朋友阐明为什么日本韶光比中国快一个小时》的影响,由于中国处于东八区,以是韶光会比标准韶光早8小时,而标准韶光该当是1970-01-01 00:00:00。
该当很多人都记得《苹果"1970 事宜"》,在几年前,一个名为vista980622的网友在国外网站Reddit的论坛上揭橥了一篇“把iPhone韶光改成1970年1月1日,手机即可永久变砖”的帖子。
在该帖子发布不久,很多人都不相信,抱着试试看的态度将手机的韶光设置成1970年1月1日,结果手机关机后重新开机真的变砖了。
由于我们处于东八区,韶光比标准韶光要快8小时,如果我们把韶光调度成1970-01-01 00:00:00,那么标准韶光就会是比这个韶光少8小时,即1969年12月31日16时0分0秒。
但是,IOS设备因此UTC时区(GMT韶光)的1970年1月1日0点0时0秒为界线,数值为0,用户把韶光调度到1969年12月31日16时0分0秒,系统就要涌现负值的韶光。
系统版本为IOS 8.0至IOS 9.3 beta3,并且搭载64位处理器(即处理器为A7-A9X的设备)的苹果设备都会触发这个Bug,导致变砖!
本站所发布的文字与图片素材为非商业目的改编或整理,版权归原作者所有,如侵权或涉及违法,请联系我们删除,如需转载请保留原文地址:http://www.baanla.com/rqz/87303.html
下一篇:返回列表
Copyright 2005-20203 www.baidu.com 版权所有 | 琼ICP备2023011765号-4 | 统计代码
声明:本站所有内容均只可用于学习参考,信息与图片素材来源于互联网,如内容侵权与违规,请与本站联系,将在三个工作日内处理,联系邮箱:123456789@qq.com