如何将 LocalDate 转换为 Instant?

我使用的是 Java8的新 DateTimeAPI。

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

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

我不明白为什么。

146169 次浏览

为了将其转换为即时,您需要一个 LocalDateTime 实例,例如:

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

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

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

此示例使用 JVM-ZoneId.systemDefault()的默认时区来执行转换。这里有一个相关问题的 更长的答案


更新: 接受的答案使用 LocalDateTime::toInstant(ZoneOffset),它只接受 ZoneOffset。这个答案使用 LocalDate::atStartOfDay(ZoneId),它接受任何 ZoneId。因此,这个答案通常更有用(也许应该是可以接受的答案)。

另外,我是 API 的主要作者