为什么 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 点。
❓
延伸问答
为什么 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 日至今的毫秒数。
➡️