我需要将LocalDateTime
对象转换为新的Instant
对象。
我已经意识到LocalDateTime
有一种toInstant
方法,但是它正在向我请求ZoneOffset
。
我不太清楚如何使用它,或者ZoneOffset
是什么意思。
答案 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);