簡體   English   中英

如何將 LocalDate 轉換為 ChronoZonedDateTime?

[英]How convert LocalDate to ChronoZonedDateTime?

在下面的代碼中,我的“if”比較出現錯誤。 消息說“ isBefore(java.time.chrono.ChronoZonedDateTime<?>) in ChronoZonedDateTime cannot be applied to (java.time.LocalDate) ”。 如何將 LocalDate 轉換為ChronoZonedDateTime

LocalDate taxBegin = tax.getBeginAt();

if(contract.getBeginAt().isBefore(taxBegin)){
    //do something
}

我嘗試像ChronoZonedDateTime.from(taxBegin)一樣包裝但沒有用,它給了我“ DateTimeException: Unable to obtain ZoneId from TemporalAccessor: 2019-12-01 of type java.time.LocalDat

為了將ZonedDateTime對象轉換為LocalDate ,您可以使用toLocalDate()方法。 因此,以下代碼應該適合您:

LocalDate taxBegin = tax.getBeginAt();

if(contract.getBeginAt().toLocalDate().isBefore(taxBegin)){
    //do something
}

檢查https://howtodoinjava.com/java/date-time/localdate-zoneddatetime-conversion/以獲取ZonedDateTimeLocalDate之間的轉換示例。

如果你有LocalDateTime而不是LocalDate ,它會工作得很好。 但是因為你有LocalDate ,你失去了時間。 現在唯一的方法是將現有的ChronoZonedDateTime轉換為LocalDate並進行比較。 但是,如果時區不同,這可能並不總是有效。

同一時區:

contract.getBeginAt().toLocalDate().isBefore(taxBegin)

您可以使用atStartOfDay(ZoneId)
IE

public static ZonedDateTime convertLocalDate(final LocalDate ld) {
    return ld.atStartOfDay(ZoneId.systemDefault());
}

您可以使用ZoneId.systemDefault()ZoneOffset.UTC
文檔說明:如果區域 ID 是 ZoneOffset,則結果始終為午夜。
所以你的代碼將是

if (contract.getBeginAt().isBefore(convertLocalDate(taxBegin))) {
    //do something
}

如果要將其轉換為特定時間,則應使用taxBegin.atTime(LocalTime).atZone(ZoneId)

暫無
暫無

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

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