[英]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/以獲取ZonedDateTime
和LocalDate
之間的轉換示例。
如果你有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.