gpt4 book ai didi

kotlin - ZonedDateTime 的比较运算符与比较方法

转载 作者:行者123 更新时间:2023-12-02 01:31:54 34 4
gpt4 key购买 nike

在比较 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

有什么区别?

最佳答案

运算符 < , > , >= , <=全部翻译成 compareTo 电话,和compareTo做了与 isBefore 略有不同的事情和 isAfter .

compareTo :

Compares this date-time to another date-time, including the chronology.The comparison is based first on the instant, then on the local date-time, then on the zone ID, then on the chronology. It is "consistent with equals", as defined by Comparable.

isBefore :

Checks if the instant of this date-time is before that of the specified date-time.

基本上,compareTo比较了很多东西。换句话说,它有更多的“决胜局”。如果有必要,它甚至会比较时间顺序。另一方面,isBefore/isAfter只比较 ZonedDateTime瞬间 s代表。

有问题的两个日期 2022-01-01T13:00+01:00[Europe/Oslo] 和 2022-01-01T12:00Z 代表同一时刻,所以 isBeforeisAfter都返回 false。另一方面,compareTo比较本地 日期时间以打破平局。 2022-01-01T13:00+01:00[Europe/Oslo] 的本地日期时间晚于 2022-01-01T12:00Z,因此 compareTo认为前者“更大”。

equals 之间也存在类似的区别( == ) 和 isEqual - equalsisEqual 多很多.

关于kotlin - ZonedDateTime 的比较运算符与比较方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73122276/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com