使用<,>和==并不总是与在比较ZonedDateTimes时使用.isBefore、.isAfter和isEqual相同,如下面的Kotlin示例所示:
import java.time.ZonedDateTime
import java.time.ZoneId
import java.time.ZoneOffset
fun main() {
val a = ZonedDateTime.of(2022, 1, 1, 13, 0, 0, 0, ZoneId.of("Europe/Oslo"))
val b = ZonedDateTime.of(2022, 1, 1, 12, 0, 0, 0, ZoneOffset.UTC)
println("a = $a")
println("b = $b")
println()
println("a < b: ${a < b}")
println("a > b: ${a > b}")
println("a == b: ${a == b}")
println()
println("a.isBefore(b): ${a.isBefore(b)}")
println("a.isAfter(b): ${a.isAfter(b)}")
println("a.isEqual(b): ${a.isEqual(b)}")
}
输出:
a = 2022-01-01T13:00+01:00[Europe/Oslo]
b = 2022-01-01T12:00Z
a < b: false
a > b: true
a == b: false
a.isBefore(b): false
a.isAfter(b): false
a.isEqual(b): true
有什么关系?
发布于 2022-07-26 03:26:02
运算符<
、>
、>=
、<=
都转换为compareTo
调用,compareTo
做的事情与isBefore
和isAfter
有很大不同。
compareTo
将此日期时间与另一个日期时间(包括年表)进行比较.比较的基础首先是即时,然后是本地日期-时间,然后是区域ID,然后是年表。正如
Comparable
所定义的,它是“与等于一致的”。
isBefore
检查此日期时间的瞬间是否早于指定的日期时间.
基本上,compareTo
比较了更多的东西。换句话说,它有更多的“打破领带”。如果有必要的话,它甚至可以把年表进行比较。另一方面,isBefore
/isAfter
只比较ZonedDateTime
s所代表的瞬间。
所讨论的两个日期,2022-01-01T13:00+01:00Europe/奥斯陆和2022-01-01T12:00Z代表相同的时间瞬间,因此isBefore
和isAfter
都返回false。另一方面,compareTo
比较本地日期时间来打破平局。当地日期时间2022-01-01T13:00+01:00Europe/奥斯陆比2022-01-01T12:00Z晚,因此compareTo
认为前者“更大”。
equals
(==
)和isEqual
- equals
之间存在着类似的区别,这比isEqual
要多得多.
https://stackoverflow.com/questions/73122276
复制相似问题