java - JDK8调整java.time.Instant的时间

标签 java java-time

我正在尝试调整 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/

相关文章:

java - 露天行动 : create a folder with a name from the uploaded metadata

java - Maven-resources-plugin如何使用不同的配置执行相同的阶段和目标

java - 两个 OffsetDateTime 之间的天数(包括小数)

java - DecimalStyle 的使用

java - DateTimeFormatter 不解析自定义日期格式

java - LocalTime 在 23.59 和 00 之间 :01

java - RxJava retryWhen 重新订阅传播

java - 如何将 JSF 语言环境传播到应用程序中的其他层

java - 线程 "main"org.apache.axis2.wsdl.codegen.CodeGenerationException : Invalid WSDL? 中的异常

java - 添加到 DateTimeFormatterBuilder 的文字破折号导致解析失败