java 如何将本地日期转换为即时日期?

vwhgwdsa  于 2023-01-16  发布在  Java
关注(0)|答案(3)|浏览(141)

我使用Java 8的新DateTime API。
如何将LocalDate转换为Instant?我遇到一个异常

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

我不明白为什么。

kqhtkvqz

kqhtkvqz1#

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

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的主要作者

yhived7q

yhived7q2#

要将其转换为即时值,您需要有LocalDateTime示例,例如:

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

tzcvj98z3#

使用这个我能够得到本地datetime示例:

LocalDateTime.now().toInstant(ZoneOffset.UTC)

相关问题