Instant和LocalDateTime有什么区别?

时间:2015-09-07 11:25:54

标签: java datetime java-8

我知道:

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

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

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

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

4 个答案:

答案 0 :(得分:18)

一个主要区别是Local的{​​{1}}部分。如果您居住在德国并创建一个LocalDateTime实例并且其他人居住在美国并在同一时刻创建另一个实例(假设时钟已正确设置) - 这些对象的值实际上会有所不同。这不适用于LocalDateTime,它是独立于时区计算的。

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

此外,Instant提供了操作日期,小时,月份等日期组件的方法。 LocalDateTime没有。

  

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

两个类具有相同的精度。 Instant不存储时区。彻底阅读javadocs,因为你可能会犯这样无效的假设:InstantLocalDateTime

答案 1 :(得分:10)

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

  

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

     

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

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

答案 2 :(得分:1)

Instant对应于本初子午线(格林威治)的时间。

LocalDateTime相对于OS时区设置,

  如果没有附加信息(如偏移或时区),

就无法代表瞬间。

答案 3 :(得分:0)

为什么答辩这么复杂?粗略地说,它们都没有时区。但是 Instant 被认为是 UTC,当本地意味着由你决定