簡體   English   中英

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();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM