JDK8调整一次java.time.Instant
JDK8 adjust time of a java.time.Instant
我正在尝试调整 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);
但我有一个例外:
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.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);
但我有一个例外:
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();
}