我知道:
仍然最终IMO都可以作为大多数应用程序用例的类型。例如:目前我正在运行一个批处理作业,我需要根据日期计算下一次运行,我很难找到这两种类型之间的优缺点(除了Instant的纳秒级精度优势和时区部分) of LocalDateTime)。
您能说出一些应用示例,其中只应使用Instant或LocalDateTime吗?
编辑:注意LocalDateTime关于精度和时区的误读文档
答案 0 :(得分:18)
一个主要区别是Local
的{{1}}部分。如果您居住在德国并创建一个LocalDateTime
实例并且其他人居住在美国并在同一时刻创建另一个实例(假设时钟已正确设置) - 这些对象的值实际上会有所不同。这不适用于LocalDateTime
,它是独立于时区计算的。
Instant
存储没有时区的日期和时间,但它的初始值取决于时区。 LocalDateTime
不是。
此外,Instant
提供了操作日期,小时,月份等日期组件的方法。 LocalDateTime
没有。
除了Instant和the的纳秒级精度优势 LocalDateTime的时区部分
两个类具有相同的精度。 Instant
不存储时区。彻底阅读javadocs,因为你可能会犯这样无效的假设:Instant和LocalDateTime。
答案 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)
答案 3 :(得分:0)
为什么答辩这么复杂?粗略地说,它们都没有时区。但是 Instant 被认为是 UTC,当本地意味着由你决定