如何将LocalDate转换为Instant?

时间:2014-04-22 09:15:10

标签: java datetime java-8 java-time

我使用Java 8的新DateTime API。

如何将LocalDate转换为Instant?

我得到了一个例外
LocalDate date = LocalDate.of(2012, 2, 2);
Instant instant = Instant.from(date);

我不明白为什么。

2 个答案:

答案 0 :(得分:98)

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

LocalDate.now().atStartOfDay().toInstant(ZoneOffset.UTC)

答案 1 :(得分:57)

Instant类表示时间线上的瞬时点。转换为LocalDate和从LocalDate date = LocalDate.now(); Instant instant = date.atStartOfDay(ZoneId.systemDefault()).toInstant(); 转换需要时区。与其他一些日期和时间库不同,JSR-310不会自动为您选择时区,因此您必须提供它。

ZoneId.systemDefault()

此示例使用JVM的默认时区 - LocalDateTime::toInstant(ZoneOffset) - 来执行转换。请参阅此处查看相关问题的longer answer


更新:接受的答案使用的ZoneOffset仅接受LocalDate::atStartOfDay(ZoneId)。此答案使用接受任何ZoneId的{​​{1}}。因此,这个答案通常更有用(可能应该是被接受的答案)。

PS。我是API的主要作者