Функция withEarlierOffsetAtOverlap

Функция withEarlierOffsetAtOverlap класса ZonedDateTime возвращает копию объекта с более ранним смещением при переходе через неоднозначное время в часовом поясе. Эта функция используется для обработки случаев, когда одно локальное время соответствует двум разным смещениям из-за перехода на летнее время.

Импорт

kotlinimport java.time.ZonedDateTime

Синтаксис

kotlinfun withEarlierOffsetAtOverlap(): ZonedDateTime

Пример

Создадим объект ZonedDateTime во время перехода на летнее время и применим функцию:

kotlinimport 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")

Результат выполнения кода:

kotlinString "Original: 2025-11-02T01:30-04:00[America/New_York]"
String "With earlier offset: 2025-11-02T01:30-04:00[America/New_York]"

Пример

Проверим разницу в смещениях при переходе на летнее время:

kotlinimport 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}")

Результат выполнения кода:

kotlinString "Earlier offset: -04:00"
String "Later offset: -05:00"

Пример

Сравним работу функции в обычное время и во время перехода:

kotlinimport 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}")

Результат выполнения кода:

kotlinString "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,
    который представляет идентификатор часового пояса