我正在尝试调整 java.time.Instant
的时间。
我尝试了这段代码:
Instant validFrom = //from my method parameter
validFrom = validFrom.with(ChronoField.HOUR_OF_DAY, 19).with(ChronoField.MINUTE_OF_DAY, 00)
.with(ChronoField.SECOND_OF_DAY, 00).with(ChronoField.MILLI_OF_DAY, 00);
但我有一个异常(exception):
java.time.temporal.UnsupportedTemporalTypeException: Unsupported field: HourOfDay
at java.time.Instant.with(Instant.java:720)
阅读文档并检查源代码是非常值得期待的。 我不太清楚为什么我不能这样做。是否有另一种方法可以在不引起多次转换的情况下执行此操作?
最佳答案
这是因为 Instant
没有时区信息。 19:00 小时并不代表任何有用的信息,除非您为其附加时区。
您可以将其转换为 ZonedDateTime
对象,然后将其转换回 Instant
,如下所示:
public void testInstant(){
Instant now = Instant.now();
ZonedDateTime utc = now.atZone(ZoneId.of("UTC"));
ZonedDateTime zonedDateTime = utc.withHour(19)
.withMinute(0)
.withSecond(0);
Instant instant = zonedDateTime.toInstant();
}
关于java - JDK8调整java.time.Instant的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47755071/