我使用Java 8的新DateTime API。如何将LocalDate转换为Instant?我遇到一个异常
LocalDate date = LocalDate.of(2012, 2, 2); Instant instant = Instant.from(date);
我不明白为什么。
kqhtkvqz1#
Instant类表示时间线上的一个瞬时点。与LocalDate的转换需要一个时区。与其他一些日期和时间库不同,JSR-310不会自动为您选择时区,因此您必须提供它。
Instant
LocalDate
LocalDate date = LocalDate.now(); Instant instant = date.atStartOfDay(ZoneId.systemDefault()).toInstant();
这个例子使用JVM的默认时区-ZoneId.systemDefault()-来执行转换,请看这里的longer answer相关问题。更新:接受的答案使用LocalDateTime::toInstant(ZoneOffset),它只接受ZoneOffset。这个答案使用LocalDate::atStartOfDay(ZoneId),它接受任何ZoneId。因此,这个答案通常更有用(可能应该是接受的答案)。附言:我是API的主要作者
ZoneId.systemDefault()
LocalDateTime::toInstant(ZoneOffset)
ZoneOffset
LocalDate::atStartOfDay(ZoneId)
ZoneId
yhived7q2#
要将其转换为即时值,您需要有LocalDateTime示例,例如:
LocalDate.now().atStartOfDay().toInstant(ZoneOffset.UTC)
tzcvj98z3#
使用这个我能够得到本地datetime示例:
LocalDateTime.now().toInstant(ZoneOffset.UTC)
3条答案
按热度按时间kqhtkvqz1#
Instant
类表示时间线上的一个瞬时点。与LocalDate
的转换需要一个时区。与其他一些日期和时间库不同,JSR-310不会自动为您选择时区,因此您必须提供它。这个例子使用JVM的默认时区-
ZoneId.systemDefault()
-来执行转换,请看这里的longer answer相关问题。更新:接受的答案使用
LocalDateTime::toInstant(ZoneOffset)
,它只接受ZoneOffset
。这个答案使用LocalDate::atStartOfDay(ZoneId)
,它接受任何ZoneId
。因此,这个答案通常更有用(可能应该是接受的答案)。附言:我是API的主要作者
yhived7q2#
要将其转换为即时值,您需要有LocalDateTime示例,例如:
tzcvj98z3#
使用这个我能够得到本地datetime示例: