409

我知道:

  • Instant是用于计算的“技术”时间戳表示(纳秒)。
  • LocalDateTime是日期/时钟表示,包括人类的时区。

最后,IMO 都可以作为大多数应用程序用例的类型。例如:目前我正在运行一个批处理作业,我需要根据日期计算下一次运行,并且我正在努力寻找这两种类型之间的优缺点(除了 Instant 的纳秒精度优势和时区部分本地日期时间)。

您能否举出一些应用示例,其中只应使用 Instant 或 LocalDateTime?

编辑:小心误读 LocalDateTime 关于精度和时区的文档

4

3 回答 3

1432
于 2015-09-07T16:40:13.170 回答
28

一个主要区别LocalLocalDateTime. 如果您住在德国并创建一个LocalDateTime实例,而其他人住在美国并在同一时刻创建另一个实例(前提是时钟设置正确)-这些对象的值实际上会有所不同。这不适用于Instant,它是独立于时区计算的。

LocalDateTime存储没有时区的日期和时间,但它的初始值取决于时区。Instant的不是。

此外,LocalDateTime还提供了操作日期组件(如天、小时、月)的方法。一个Instant没有。

除了 Instant 的纳秒精度优势和 LocalDateTime 的时区部分

两个类具有相同的精度。LocalDateTime不存储时区。彻底阅读 javadocs,因为您可能会因此类无效假设而犯大错误:InstantLocalDateTime

于 2015-09-07T11:49:28.307 回答
13

您错了LocalDateTime:它不存储任何时区信息,并且具有纳秒精度。引用 Javadoc(强调我的):

ISO-8601 日历系统中没有时区的日期时间,例如 2007-12-03T10:15:30。

LocalDateTime 是一个不可变的日期时间对象,它表示日期时间,通常被视为年-月-日-时-分-秒。也可以访问其他日期和时间字段,例如一年中的某一天、一周中的某一天和一周中的一周。时间以纳秒精度表示。例如,值“2007 年 10 月 2 日 13:45.30.123456789”可以存储在 LocalDateTime 中。

两者之间的区别在于,它Instant代表了与纪元 (01-01-1970) 的偏移,因此,代表了时间线上的特定时刻。在地球的两个不同地方同时创建的两个Instant对象将具有完全相同的值。

于 2015-09-07T11:50:02.400 回答