手机,作为我们日常使用的电子产品,也可以用来刷电视剧、社交、购物等,但对它的了解不多。
其实,手机里也有很多我们不知道的小“秘密”。打个比方,相信很多小伙伴都不知道,手机的系统时间最晚只能设定到2038年。那么问题就来了,2038年到底会发生什么呢?
2038年,是很多操作系统的“最后一年”
最近,小黑在网上看到了一则十分好玩的发帖。一名网友发现自己的手机,最多只能把系统时间设定到2038年,这就引起了他的好奇:2038年是不是有什么特殊意义呢?当然,这里说的系统时间并不是日历里的时间,而是手机设置里对系统时间的设定。
这也引起了小黑的好奇心:手机的系统时间真的只能设定到2038年么?带着这些疑问,小黑特意找了多部电子产品试验,测试结果让小黑大吃一惊。
首先,小黑测试了常用手机操作系统的系统时间设定,发现这还确实是真的。
安卓手机上的系统时间只能翻到2037年12月31日,iPhone手机虽然可以划到2038年,但也只能停留在2038年的1月。虽然小黑多次尝试将iPhone的设定滑到2038年之后,但最终手机上的时间还是回到了2038年1月,无法再往后推进。
而在电脑操作系统上,这个问题就比较复杂了。MacBook Pro上的macOS确实只能将时间设定到2038年,不过Windows 10的系统时间就可以设定到2052年。还有一些小伙伴表示,他们的电脑可以设定到2076年。
为了精确确定系统的“最后时间”,有网友将系统限定的时间精确到了2038年1月19日03时14分07秒,在下一秒,系统显示的时间就直接跳回到遥远的1901年了。
对于我们用户来说,这样的事情当然是不发生最好了。举个例子,当小伙伴们一觉醒来看到手机时间竟然显示的是1901年,肯定会认为自己是在做梦或者穿越了。
误以为“穿越”还是小事,更重要的是,这会给我们的生活和工作带来很多麻烦。
“2038年问题”还真是系统的锅
那么,为什么操作系统会有系统时间设定的限制呢?
这个问题还得追溯到现在很多操作系统的起源。以我们现在使用的安卓和iOS操作系统为例,它们都属于类Unix操作系统,而Unix则是20世纪70年代的产物。在当时,计算机的硬件资源十分有限,为了节约资源,当时的程序员们就采用了“time_t”数据模式存储时间。这一模式用有符号的32位整数来存储系统计算的秒数,以秒作为单位,通过二进制的方式储存时间。
因此,通过这一数据模式最多能存储的“秒数”在二进制下就表示成32个1,换算成十进制,就是2147483647秒。
而Unix操作系统的起始时间被设定在1970年的1月1日,加上上面所说的2147483647秒,其时间刚好就是2038年的1月19日3点14分07秒。
此时时间已经饱和,下一秒就会溢出,打个比方,一个碗只有那么大,你往里面灌水,当水超过碗的容量时,水就会溢出,无法再接纳。
同样的道理,这时所有的数值都将向前进一,导致符号位被推到1,其他的31位刚好置于0。届时,系统时间就会重回到1901年12月13日20时45分52秒,使得系统出现错误。
由于时间限制出现的问题也有不少,其中著名的“千年虫”事件差点让全世界崩溃。在20世纪80年代之前,由于存储空间有限,程序员就用年的后两位数字代替年份,比如05/12/94,表示的是1994年12月5日,当时间来到2000年时,系统只会显示01/01/00,这里的00,系统无法识别是1900还是2000,就会出现时间错误。
因此受到影响的行业设备有很多,比如自动化仪器仪表、电梯、警报系统等设备以及美国的AT&T电讯公司,它内部就有超过3.6亿行的应用程序需要检测。虽然这个问题当时已经被程序员解决了,但依然有不少人担心2038年是否还会再次发生千年虫事件。
在小黑看来,发生的可能是很小的。现在距离2038年还有16年,那时小伙伴们的手机早已更新迭代了。除此之外,根据相关消息,2038年的问题可比当年千年虫问题好解决多了,它可能只需要给系统换一个新版本的“标准时间库”就可以了,比如将时间存储由4字节32位改为8字节64位。
当年千年虫问题都被程序员们用windowing时间窗口解决,并在之后的时间里也没有出现任何问题。小黑相信在2038年发生千年虫事件的概率也十分小,所以小伙伴也不用过于担心2038年电子产品就不能使用了。
图源:手机截图、pixabay