如何将 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
”
你可以使用 atStartOfDay(ZoneId)
即
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)
.
要将 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)
在下面的代码中,我的 "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
”
你可以使用 atStartOfDay(ZoneId)
即
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)
.
要将 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)