我正在尝试使用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让我编写代码并编译它而不会尖叫?
答案 0 :(得分:4)
它编译得很好,因为Instant.from(TemporalAccessor temporal)
接受TemporalAccessor而LocalDateTime
是TemporalAccessor
的子类。
在运行时,您会收到异常,因为要创建Instant
,TemporalAccessor
必须包含字段INSTANT_SECONDS
和NANO_OF_SECOND
,但LocalDateTime
不会t仅INSTANT_SECONDS
提供NANO_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));