Java内用32位表示的最大值是什么?
在Java中是用32位来表示的,所以32位可以表示的最大值是。 另外,一年365天的总秒数/=68.1,也就是说32位可以表示的最长时间是68.1,也就是说32位可以表示的最长时间是68年。 从 1970 年开始,加上 68.1 年,实际最大时间将在 2038 年 1 月 19 日 03:14:07 达到。在这个时间点之后,所有 32 位操作系统时间将变为 10,即 1901 年 20:45 2019年12月13日:52点,会出现时间倒退,很多软件运行异常。
至此我想问题的答案已经出现了,那是因为32位表示的最大时间间隔是68年,而最早的UNIX系统考虑到计算机的年龄和应用的时间限制,把1970年考虑进去了。 1 月 1 日是 UNIX TIME 的纪元时间(开始时间)。 至于时间回归现象,相信在64位操作系统下,可以表示为292,277,026,596年12月4日14:30:08。 这已经是千亿年之后的事情了什么时候世界末日,根本不用担心。
最后一个问题:在上面的.out.(new Date(0))中,打印的时间是8点而不是0点。 原因是系统时间和本地时间有问题。 其实系统时间还是0点,但是我把电脑时区设置为东8点,所以打印的结果是8点。
我想,如果把以上问题作为面试问题,会难倒很多人。
UNIX和Linux的时间系统是从“新纪元时间”纪元开始计算的,单位是秒。 纪元指定为格林威治标准时间 1970 年 1 月 1 日上午 0:00:00。
目前,大多数UNIX系统都使用32位来记录时间。 正值代表1970年之后,负值代表1970年之前。我们可以很简单地计算出它的时域:
2^31/86400(秒) = 24855.13481(天) ≈ 68.0958(年)
1970+68.0958 = 2038.0958
1970-68.0958 = 1901.9042
时间字段为[1901.9042,2038.0958]。
准确的时间是2038年1月18日星期一10点14分7秒,那一刻时间会变成负值,变成1901年12月13日黑色星期五下午3点45分52秒,杰森就会出来砸球用斧子砍你的电脑。
这就是所谓的UNIX 2038 BUG,或者你也可以戏称为Jason bug。 在大多数UNIX上,不存在所谓的Y2K问题,但存在2038问题。
在一些64位平台上,如Alpha、SGI、Sparc等,都使用64位来表示时间。
2^63/86400 ~ 1E14(天) ~ 2.92E11(年)。 那大约是2920亿年。
因此,使用 64 位的计算机可能会存在错误。 届时,位于猎户座旋臂的太阳将已经是黑矮星或暗物质,猎户座旋臂可能已被引力波破碎,银河系可能已成为一颗小型准恒星。
虽然很多人认为UNIX的2038问题会随着技术的进步逐渐被64位计算机取代,所以不必担心。 但我个人认为2038年,很多情况还是会发生。 因为事实上,当前的许多 UNIX 系统都有足够的容量服务到 2038 年什么时候世界末日,不会出现任何问题。 因此,如果你打算购买电脑主机并期望使用到那时,最好购买64位电脑,以确认只会出现末日问题(除非你想将数据传播到下一个宇宙,那么你需要购买另一台电脑)别担心)。
- 上一篇: 中药可以长期喝吗?中药不能和什么一起同服?
- 下一篇: 入秋泡脚百病全消,泡脚养生,已有数千年历史!