我需要将 LocalDateTime
对象转换为新的 Instant
对象。
我已经意识到 LocalDateTime
有一个 toInstant
方法,但它要求我一个 ZoneOffset
。
我不太明白如何使用它,或者 ZoneOffset
是什么意思。
最佳答案
您不能将 LocalDateTime
直接转换为 Instant
,因为 LocalDateTime
可以表示多个瞬间。它并不代表一个特定的时刻。
这是一个 LocalDateTime
:
23/10/2018 09:30:00
你能仅通过观察就知道上面的时间究竟指的是哪个时刻吗?不是,因为英国的那个时间和中国的那个时间是不同的时刻。
要弄清楚该时间指的是什么时刻,您还需要知道它与 UTC 相差多少小时,这就是 ZoneOffset
基本表示的内容。
例如,对于 8 小时的偏移量,您可以这样写:
localDateTime.toInstant(ZoneOffset.ofHours(8))
或者,如果您知道您始终希望本地日期时间在当前时区的时区偏移量,您可以将 ZoneOffset.ofHours(8)
替换为:
ZoneId.systemDefault().getRules().getOffset(localDateTime)
在将其转换为瞬间之前,您应该考虑要使用的偏移量。
关于java - 将 LocalDateTime 转换为 Instant 需要 ZoneOffset。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52944410/