ZonedDateTime
Класс ZonedDateTime представляет дату и время с информацией о часовом поясе и смещении от UTC.
Это неизменяемый класс, который комбинирует LocalDateTime и ZoneId,
позволяя работать с временными зонами и учитывать летнее время.
Импорт
import java.time.ZonedDateTime
import java.time.ZoneId
Синтаксис создания
fun now(): ZonedDateTime
fun now(zone: ZoneId): ZonedDateTime
fun of(year: Int, month: Int, day: Int, hour: Int, minute: Int, second: Int, nanoOfSecond: Int, zone: ZoneId): ZonedDateTime
fun of(localDateTime: LocalDateTime, zone: ZoneId): ZonedDateTime
fun parse(text: CharSequence): ZonedDateTime
fun parse(text: CharSequence, formatter: DateTimeFormatter): ZonedDateTime
Пример
Создадим объект ZonedDateTime с текущей датой и временем в системном часовом поясе:
val now = ZonedDateTime.now()
println(now)
Результат выполнения кода:
String "2025-09-11T14:30:45.123+03:00[Europe/Moscow]"
Пример
Создадим объект ZonedDateTime для конкретной даты и времени в указанном часовом поясе:
val dateTime = ZonedDateTime.of(2025, 12, 31, 23, 59, 45, 0, ZoneId.of("America/New_York"))
println(dateTime)
Результат выполнения кода:
String "2025-12-31T23:59:45-05:00[America/New_York]"
Пример
Распарсим строку в формате ISO-8601 в объект ZonedDateTime:
val parsed = ZonedDateTime.parse("2025-07-15T10:30:00+02:00[Europe/Paris]")
println(parsed)
Результат выполнения кода:
String "2025-07-15T10:30:00+02:00[Europe/Paris]"
Пример
Получим компоненты даты и времени из объекта ZonedDateTime:
val zdt = ZonedDateTime.parse("2025-03-20T15:45:30-08:00[America/Los_Angeles]")
val year = zdt.year
val month = zdt.monthValue
val day = zdt.dayOfMonth
val hour = zdt.hour
val minute = zdt.minute
val zone = zdt.zone
println("Year: $year, Month: $month, Day: $day, Time: $hour:$minute, Zone: $zone")
Результат выполнения кода:
String "Year: 2025, Month: 3, Day: 20, Time: 15:45, Zone: America/Los_Angeles"
Пример
Конвертируем ZonedDateTime в другой часовой пояс:
val nyTime = ZonedDateTime.parse("2025-12-31T20:00:00-05:00[America/New_York]")
val tokyoTime = nyTime.withZoneSameInstant(ZoneId.of("Asia/Tokyo"))
println(tokyoTime)
Результат выполнения кода:
String "2026-01-01T10:00:00+09:00[Asia/Tokyo]"
Смотрите также
-
класс
LocalDateTime,
который представляет дату и время без информации о часовом поясе -
класс
ZoneId,
который представляет идентификатор часового пояса -
класс
OffsetDateTime,
который представляет дату и время со смещением от UTC -
метод
parseклассаZonedDateTime,
который преобразует строку в объект ZonedDateTime