Java 将LocalDateTime转换为Instant需要区域偏移。为什么?
我需要将Java 将LocalDateTime转换为Instant需要区域偏移。为什么?,java,java-time,Java,Java Time,我需要将LocalDateTime对象转换为新的Instant对象 我已经意识到,LocalDateTime有一个toInstant方法,但它请求我一个ZoneOffset 我不太明白如何使用它,或者分区偏移的含义是什么。您可以尝试以下方法: LocalDateTime dateTime = LocalDateTime.of(2018, Month.OCTOBER, 10, 31, 56); Instant instant = dateTime.atZone(ZoneId.of("Europe/
LocalDateTime
对象转换为新的Instant
对象
我已经意识到,LocalDateTime
有一个toInstant
方法,但它请求我一个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)
在将其转换为瞬间之前,您应该考虑要使用的偏移量。查看状态:历元秒是从标准Java历元1970-01-01T00:00:00Z开始测量的。Z代表祖鲁时区。重要的是您需要一个时区,这样Java就可以从给定的时间正确地计算出瞬间。很好的解释。您是否可以添加一种编程方式来确定本地系统的偏移量?我在服务器上。如何获取当前服务器的分区偏移量?虽然它没有真正回答标题中的“为什么”,但它清楚地显示了解决问题的正确方法(当然,必须替换正确的时区)。