如何将LocalDate转换为Instant?

use*_*352 89 java datetime java-8 java-time

我使用Java 8的新DateTime API.

如何将LocalDate转换为Instant?我得到一个例外

LocalDate date = LocalDate.of(2012, 2, 2);
Instant instant = Instant.from(date);
Run Code Online (Sandbox Code Playgroud)

而且我不明白为什么.

mdo*_*mdo 114

为了将其转换为瞬间,您需要具有LocalDateTime实例,例如:

LocalDate.now().atStartOfDay().toInstant(ZoneOffset.UTC)
Run Code Online (Sandbox Code Playgroud)


Jod*_*hen 70

Instant类表示时间线的瞬时点.转换为a和从a转换LocalDate需要时区.与其他一些日期和时间库不同,JSR-310不会自动为您选择时区,因此您必须提供它.

LocalDate date = LocalDate.now();
Instant instant = date.atStartOfDay(ZoneId.systemDefault()).toInstant();
Run Code Online (Sandbox Code Playgroud)

此示例使用JVM的默认时区ZoneId.systemDefault()- 来执行转换.请参阅此处以获取相关问题的更长答案.


更新:接受的答案使用LocalDateTime::toInstant(ZoneOffset)仅接受ZoneOffset.这个答案使用LocalDate::atStartOfDay(ZoneId)哪个接受任何ZoneId.因此,这个答案通常更有用(并且可能应该是可接受的答案).

PS.我是API的主要作者

  • 我认为这比公认的答案更有用,因为 ZoneId(时区)是参数而不是 ZoneOffset(从 UTC 偏移的小时数,可能会在夏季/冬季的时区发生变化)。 (2认同)