Функция withEarlierOffsetAtOverlap
Функция withEarlierOffsetAtOverlap класса ZonedDateTime возвращает копию объекта с более ранним смещением при переходе через неоднозначное время в часовом поясе.
Эта функция используется для обработки случаев, когда одно локальное время соответствует двум разным смещениям из-за перехода на летнее время.
Импорт
import java.time.ZonedDateTime
Синтаксис
fun withEarlierOffsetAtOverlap(): ZonedDateTime
Пример
Создадим объект ZonedDateTime во время перехода на летнее время и применим функцию:
import java.time.ZoneId
import java.time.ZonedDateTime
import java.time.LocalDateTime
val zone = ZoneId.of("America/New_York")
val ambiguousTime = LocalDateTime.of(2025, 11, 2, 1, 30)
val zdt = ZonedDateTime.of(ambiguousTime, zone)
val result = zdt.withEarlierOffsetAtOverlap()
println("Original: $zdt")
println("With earlier offset: $result")
Результат выполнения кода:
String "Original: 2025-11-02T01:30-04:00[America/New_York]"
String "With earlier offset: 2025-11-02T01:30-04:00[America/New_York]"
Пример
Проверим разницу в смещениях при переходе на летнее время:
import java.time.ZoneId
import java.time.ZonedDateTime
import java.time.LocalDateTime
val zone = ZoneId.of("America/New_York")
val dt = LocalDateTime.of(2025, 11, 2, 1, 30)
val zdt = ZonedDateTime.of(dt, zone)
val earlier = zdt.withEarlierOffsetAtOverlap()
val later = zdt.withLaterOffsetAtOverlap()
println("Earlier offset: ${earlier.offset}")
println("Later offset: ${later.offset}")
Результат выполнения кода:
String "Earlier offset: -04:00"
String "Later offset: -05:00"
Пример
Сравним работу функции в обычное время и во время перехода:
import java.time.ZoneId
import java.time.ZonedDateTime
import java.time.LocalDateTime
val zone = ZoneId.of("America/New_York")
val normalTime = LocalDateTime.of(2025, 6, 15, 12, 0)
val normalZdt = ZonedDateTime.of(normalTime, zone)
val normalResult = normalZdt.withEarlierOffsetAtOverlap()
val overlapTime = LocalDateTime.of(2025, 11, 2, 1, 30)
val overlapZdt = ZonedDateTime.of(overlapTime, zone)
val overlapResult = overlapZdt.withEarlierOffsetAtOverlap()
println("Normal time result: $normalResult")
println("Overlap time result: $overlapResult")
println("Are they equal? ${normalZdt == normalResult}")
println("Are they equal? ${overlapZdt == overlapResult}")
Результат выполнения кода:
String "Normal time result: 2025-06-15T12:00-04:00[America/New_York]"
String "Overlap time result: 2025-11-02T01:30-04:00[America/New_York]"
String "Are they equal? true"
String "Are they equal? true"
Смотрите также
-
функцию
withLaterOffsetAtOverlapклассаZonedDateTime,
которая возвращает копию с более поздним смещением при перекрытии -
функцию
withZoneSameInstantклассаZonedDateTime,
которая преобразует время в другой часовой пояс с сохранением момента времени -
функцию
getOffsetклассаZonedDateTime,
которая возвращает смещение часового пояса -
класс
ZoneId,
который представляет идентификатор часового пояса