2

我正在尝试始终如一地使用 Java 8 日期时间 API,我正在寻找这种行为背后的解释:

Instant.from(LocalDateTime.of(2017,01,01,0,0,0,0))

编译得很好,但产生:

Exception in thread "main" java.time.DateTimeException: Unable to obtain Instant from TemporalAccessor: 2017-01-01T00:00 of type java.time.LocalDateTime

我的问题是:如果这些类型不兼容,为什么 API 让我编写代码并编译它而不用尖叫?

4

1 回答 1

4

它编译得很好,因为它Instant.from(TemporalAccessor temporal)接受TemporalAccessor并且LocalDateTimeTemporalAccessor.

在运行时你会得到一个异常,因为创建一个Instant必须TemporalAccessor有字段INSTANT_SECONDSNANO_OF_SECOND,但不只LocalDateTime提供。INSTANT_SECONDSNANO_OF_SECOND

要从 LocalDateTime 创建 Instant 更好地使用(例如):

LocalDateTime localDateTime = LocalDateTime.now();
ZoneId zoneId = ZoneId.systemDefault();
Instant instant = localDateTime.atZone(zoneId).toInstant();

或者

LocalDateTime localDateTime = LocalDateTime.now();
Instant instant = localDateTime.toInstant(ZoneOffset.ofHours(0));
于 2017-12-08T09:22:48.883 回答