157

我使用 Java 8 的新 DateTime API。

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

LocalDate date = LocalDate.of(2012, 2, 2);
Instant instant = Instant.from(date);

我不明白为什么。

4

2 回答 2

164

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

LocalDate.now().atStartOfDay().toInstant(ZoneOffset.UTC)
于 2014-04-22T09:20:37.743 回答
161

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

LocalDate date = LocalDate.now();
Instant instant = date.atStartOfDay(ZoneId.systemDefault()).toInstant();

本示例使用 JVM 的默认时区 - ZoneId.systemDefault()- 来执行转换。有关相关问题的更长答案,请参见此处。


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

PS。我是 API 的主要作者

于 2014-05-27T09:48:22.797 回答