将LocalDateTime转换为Instant需要一个ZoneOffset。为什么?

时间:2018-10-23 08:25:31

标签: java java-time

我需要将LocalDateTime对象转换为新的Instant对象。

我已经意识到LocalDateTime有一种toInstant方法,但是它正在向我请求ZoneOffset

我不太清楚如何使用它,或者ZoneOffset是什么意思。

2 个答案:

答案 0 :(得分:8)

您无法将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)

在将其转换为瞬时值之前,您应该考虑要使用的偏移量。

答案 1 :(得分:0)

您可以尝试以下操作:

LocalDateTime dateTime = LocalDateTime.of(2018, Month.OCTOBER, 10, 31, 56);
Instant instant = dateTime.atZone(ZoneId.of("Europe/Rome")).toInstant();
System.out.println(instant);