为什么手机变砖?为什么大多数电子设备时间只能设置到1970年后?

createh53个月前 (02-01)技术教程46

手机、平板、电脑的初始日期,为什么只能最早设置到1970年1月1日?

在2016年2月12日,据披露,如果把苹果iPhone、iPad等设备的系统时间设置为1970年1月1日,随后重启设备,它会无法正常启动。苹果公司正式承认了漏洞存在,但是尚未公布具体的引发原因。




苹果解决这个bug的手段也很简单粗暴。对此采用的策略是在随后的固件更新中将时间禁止调整到2000年以前。哈哈

其实除了电子设备的系统日期,电脑、手机上的各种文件、文件夹的日期,也是不会比1970年1月1日更早的了




UNIX时间的开始:1970年1月1日

1970年1月1日作为时间计算起点只是当年UNIX系统设计的选择,并不是其他系统的。UNIX的发展几乎超越其他系统,她的选择也就成了POSIX标准。安卓手机的操作系统核心是Linux,苹果iOS的核心是Mach + FreeBSD,这都是符合POSIX标准的UNIX类系统,时间的定义当然也是沿用了UNIX的设计。


可移植操作系统接口(英语:Portable Operating System Interface,缩写为POSIX)是IEEE为要在各种UNIX操作系统上运行软件,而定义API的一系列互相关联的标准的总称,其正式称呼为IEEE Std 1003,而国际标准名称为ISO/IEC 9945

所以这也就解释了1970年1月1日问题。。。

2000年问题?



2000年问题,中国大陆及香港常称为千年虫问题,是指由于计算机程序设计的一些问题,使得计算机在处理2000年1月1日以后的日期和时间时,可能会出现不正确的操作,从而可能导致一些敏感的工业部门(比如电力,能源)和银行,政府等部门在2000年1月1日零点工作停顿甚至是发生灾难性的结果。



2000年问题在英文中通常缩写为Y2K。其中Y表示“year”也就是年,而K则表示拉丁前缀“kilo”,表示1000。Y2K也可用来指2000年。

一般来说,由于计算机程序中使用两个数字来表示年份,如1998年被表示为“98”、1999年被表示为“99”;而2000年被表示为“00”,这样将会导致某些程序在计算时得到不正确的结果,如把“00”误解为1900年。在嵌入式系统中可能存在同样的问题,这有可能导致设备停止运转或者发生更加灾难性的后果。


由于世界上各地的政府和企业都对两千年问题给予足够关注,1999年1月1日到2000年3月1日并没有出现大范围的计算机故障。


2038年问题?



CPU和配合的计算机操作系统,都是32位,所以时间也是用32位表示。就是2的31次方-1 !

System.out.println(Integer.MAX_VALUE);

2147483647

Integer 在JAVA内用32位表示,因此32位能表示的最大值是2147483647。

另外1年365天的总秒数是 31536000,2147483647/31536000 = 68.1,也就是说32位,即2147483647秒,最多能表示的时间是68年。

1970+68=2038

2038年问题可能会导致某些软件在2038年1月19日3时14分07秒之后无法正常工作。所有使用POSIX时间表示时间的程序都将受其影响,因为它们以自1970年1月1日经过的秒数(忽略闰秒)来表示时间。超过此一瞬间,时间将会“绕回”且在内部被表示为一个负数,并造成程序无法工作,因为它们无法将此时间识别为2038年,而可能会依个别实现而跳回1970年或1901年。因此可能产生错误的计算机动作。

10000年问题?


10000年问题:许多需处理日期的程序会在2000年时将年份错误显示为1900年、19100年或100年,因为编程人员直接在以两位数记录的年份前面加上"19"以简化程序或节省内存空间。这类的日期显示错误不太可能在10000年来临时再度发生,因为这种记录方式在此时是没有用处的。然而,部分程序在处理日期时只会显示末4码的年份。这可能会导致10000年被显示为"0000年"。


实际上,在10000年时,由于未来科技及软件的进步-不再只以少数几个数字表示年份,这可能不再是个问题。


最后对比一下32位和64位操作系统


所谓32位、64位操作系统和相关硬件,是指CPU一次能处理队列序令的能力,32位的当然是一次性执行32位的数据,64位的当然是一次性执行64位的数据。

理论上来说,64位处理器的运算能力,要比32位的要强一倍,当然还要看CPU的其他指标,这个不能一概而论。


2的32次方是32位操作系统能够管理的内存数,正是4294967296位,换算下来,这个数据正好是4GB。

64位系统支持的内存量,就要比32位的大很多,目前64位桌面级的Windows系统,最大可以支持128GB的内存,不少家庭的电脑配备的内存容量,还是4GB、8GB的级别,所以64位操作系统+64位硬件,将是未来很长一段时间里,我们选购软硬件平台的最佳选择。

相关文章

给32位系统装8g内存条能用吗?为什么?

关于32位和64位,这个概念一直让人比较懵。在买电脑的时候,我们看到过32位和64位CPU。下软件的时候,我们也看到过32位或64位的软件。就连装虚拟机的时候,我们也看过32位和64位的系统。在写代码...

我的编程梦----聊聊Java特性(java编程特点)

上一篇文章聊了学习编程可能会遇到的心里障碍和为什么学习Java,看了网友们的回复小编很激动,我会积极听取网友们的留言,在我以后的文章中改进。现在说Java语言的特性,每一种语言都有自己的特性,Java...

java采用int32作为hashcode,会不会出现更高的碰撞概率?

在Java中,hashCode方法通常返回一个int类型的值,其范围是从-2^31到2^31-1的整数。尽管这个范围实际上可以容纳2^31个不同的哈希值,但在日常讨论和某些上下文中,可能会将其简化为"...

Java面试必考问题:对象在内存中是如何布局的?

对象的内存布局在HotSpot虚拟机中,对象在内存中的布局可以分为3块区域:对象头(Header)、实例数据(Instance Data)和对象填充(Padding)。实例数据: 包括了对象的所有成员...

二 JAVA语言基础之 基本数据类型(java的基本数据类型有哪些并简单叙述)

前面我们搭建了JAVA的开发环境和开发工具,今天我们正式进入JAVA基础语法的学习。首先认知下JAVA的八大基本类型:Java中主要有八种基本数据类型:1、整型:byte、short、int、long...

32位已死,对安卓和苹果意味着什么?

Arm宣布,从2023年起,其所有新智能手机CPU内核都将仅为64位,且没有32位兼容模式。2013年,苹果就在iPhone 5s中使用了64位A7处理器,我们开始拥有支持64位的智能手机处理器。不久...