java - 将 LocalDateTime 转换为 Instant 需要 ZoneOffset。为什么?

标签 java java-time

我需要将 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/

相关文章:

Java:使用 java.time 将 object.toString 解析为 LocalDate 时遇到问题

java - 期间.仅减去天数

java - Long[] 到 long[],反之亦然?

java - 如何让 Java 测试容器在 Docker 多阶段构建中工作?

java - 防止 Android 屏幕在特定屏幕上进入 hibernate 状态 (LibGDX)

java - 无法在 JTextfield 中键入或删除文本

java - JAXB 解码适用于 Java 1.8,但在 Java 1.7 中返回空值

java.time.format.DateTimeParseException : Text could not be parsed at index 0

java - 无法从 TemporalAccessor 获取 LocalTime

java - 如何使用 LocalDateTime.parse(...) 解析 ISO 日期