为什么 getTime() 返回 1970 年至今的毫秒?

💡 原文中文,约1800字,阅读约需5分钟。
📝

内容提要

Java 和 UNIX 系统的时间起点为 1970 年 1 月 1 日,32 位系统的最大时间限制为 68 年,未来的 64 位系统将解决时间回归问题。时间差异源于时区设置。

🎯

关键要点

  • Java 和 UNIX 系统的时间起点为 1970 年 1 月 1 日。

  • getTime() 方法计算从 1970 年 1 月 1 日至今的毫秒数。

  • UNIX 系统认为时间纪元是 1970 年 1 月 1 日 0 点。

  • 32 位系统的最大时间限制为 68 年,最大值为 2147483647。

  • 2038 年 1 月 19 日将达到 32 位系统的最大时间,可能导致时间回归问题。

  • 64 位系统将解决时间回归问题,可以表示到 292,277,026,596 年。

  • 打印的时间与系统时区设置有关,实际时间为 0 点,但因时区显示为 8 点。

🔎

延伸解读

时间起点的历史背景

1970年1月1日被选为时间起点,源于UNIX系统的设计。这个时间点的选择反映了当时计算机技术的局限性,32位系统只能表示68年的时间范围,这也影响了后续编程语言的时间处理方式。

32位与64位系统的区别

32位系统在2038年将面临时间回归问题,可能导致软件异常。相比之下,64位系统可以表示更长的时间范围,解决了这一限制。因此,未来的系统升级将是确保时间处理准确性的关键。

时区对时间显示的影响

在使用getTime()方法时,打印的时间与系统时区设置有关。尽管实际时间为0点,但因时区不同,显示结果可能会有所偏差。了解这一点有助于开发者在处理时间时避免混淆。

延伸问答

为什么 getTime() 方法从 1970 年 1 月 1 日开始计算时间?

因为 UNIX 系统将 1970 年 1 月 1 日 0 点视为时间纪元,Java 也沿用了这一习惯。

32 位系统的时间限制是什么?

32 位系统的最大时间限制为 68 年,最大值为 2147483647。

2038 年会发生什么问题?

到 2038 年 1 月 19 日,32 位系统将达到最大时间,可能导致时间回归问题。

64 位系统如何解决时间回归问题?

64 位系统可以表示到 292,277,026,596 年,解决了32位系统的时间限制问题。

为什么打印的时间与实际时间不同?

打印的时间受系统时区设置影响,实际时间为 0 点,但因时区显示为 8 点。

Java 中如何获取当前时间的毫秒数?

可以使用 new Date().getTime() 方法获取从 1970 年 1 月 1 日至今的毫秒数。

🏷️

标签

➡️

继续阅读