Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Я не понял при чем тут зона времени. Такое поведение происходит из-за того, что сначала сравнение идет по Instant (и тут эти два офсета равны), а затем по LocalDateTime которые лежат в основе (и тут compareTo выдает "неожиданный" результат. Это сделано для консистентности с методом equals которую обязан гарантировать compareTo. Если ваш пример поменять на
val inUtc = OffsetDateTime.of(LocalDateTime.of(2021, 4, 25, 10, 0), ZoneOffset.UTC)
val inUtc1 = OffsetDateTime.of(LocalDateTime.of(2021, 4, 25, 11, 0), ZoneOffset.ofTotalSeconds(60*60))
println(inUtc1>=inUtc && inUtc1 <= inUtc)
println(inUtc == inUtc1)то оба принта выведут false.
Но то что, equals так работает на OffsetDateTime это, конечно, очень неожиданно.
first.from.isEqual(second.to) || first.from.isBefore(second.to)
превращается в
!first.from.isAfter(second.to)
Работа с java.time в Kotlin: любовь, боль, страдания