我使用Java 8的新DateTime API。
如何将LocalDate转换为Instant? 我得到了一个异常。
LocalDate date = LocalDate.of(2012, 2, 2);
Instant instant = Instant.from(date);
我不明白为什么。
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
。因此,本答案通常更实用(并且可能应该成为被接受的答案)。
PS. 我是API的主要作者。
为了将其转换为Instant,您需要拥有一个LocalDateTime实例,例如:
LocalDate.now().atStartOfDay().toInstant(ZoneOffset.UTC)
使用这个方法,我可以获取本地日期时间实例:
LocalDateTime.now().toInstant(ZoneOffset.UTC)
LocalDateTime
,而不是 LocalDate
。 - Ilya Serbis
LocalDate
不包含时间。 - OrangeDog