一、什么是Instant?为何而生?
在 Java 8 引入的新日期时间 API (java.time 包) 中,Instant 类代表的是一个时间线上的瞬时点。你可以将其想象为一个在宇宙中绝对且唯一的时间戳,它与任何时区、历法都无关,专为计算机系统和应用程序提供一种单一、无歧义的时间表示方式。
它的诞生是为了解决旧的 java.util.Date 类的诸多缺陷:
- 不明确性:
Date虽然底层是 UTC 时间戳,但其toString()方法却依赖于 JVM 的默认时区,极易让人误解。 - 可变性:
Date对象是可变的,不是线程安全的,这在多线程环境中是潜在的风险。 - 糟糕的API设计:年份从1900开始、月份从0开始等反人类设计,使得代码难以编写和维护。
Instant 通过其不可变性、线程安全性和清晰的设计完美地解决了这些问题。
二、Instant的核心原理
Instant 在内部使用两个字段来存储时间:
long seconds:存储自 Unix 纪元 (1970-01-01T00:00:00Z) 以来的秒数。int nanos:存储秒以内的纳秒精度(0-999,999,999)。
这种存储方式使其能够表示一个极其精确且范围广阔的时间点(理论上可以从负十亿年到正十亿年)。

最低0.47元/天 解锁文章
2701

被折叠的 条评论
为什么被折叠?



