将 LocalDateTime 转换为 Instant 需要 ZoneOffset。为什么?
Convert LocalDateTime to Instant requires a ZoneOffset. Why?
我需要将 LocalDateTime
对象转换为新的 Instant
对象。
我发现 LocalDateTime
有一个 toInstant
方法,但它要求我 ZoneOffset
.
我不太明白如何使用它,或者 ZoneOffset
是什么意思。
你可以试试这个:
LocalDateTime dateTime = LocalDateTime.of(2018, Month.OCTOBER, 10, 31, 56);
Instant instant = dateTime.atZone(ZoneId.of("Europe/Rome")).toInstant();
System.out.println(instant);
您不能将 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)
在将其转换为瞬间之前,您应该考虑要使用的偏移量。
我需要将 LocalDateTime
对象转换为新的 Instant
对象。
我发现 LocalDateTime
有一个 toInstant
方法,但它要求我 ZoneOffset
.
我不太明白如何使用它,或者 ZoneOffset
是什么意思。
你可以试试这个:
LocalDateTime dateTime = LocalDateTime.of(2018, Month.OCTOBER, 10, 31, 56);
Instant instant = dateTime.atZone(ZoneId.of("Europe/Rome")).toInstant();
System.out.println(instant);
您不能将 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)
在将其转换为瞬间之前,您应该考虑要使用的偏移量。