Метод withZone

Метод withZone класса DateTimeFormatter устанавливает часовой пояс для форматтера. В параметр мы передаем объект ZoneId, представляющий часовой пояс. Метод возвращает новый форматтер с установленным часовым поясом, при этом исходный форматтер остается неизменным.

Импорт

kotlinimport java.time.format.DateTimeFormatter
import java.time.ZoneId

Синтаксис

kotlinfun withZone(zone: ZoneId): DateTimeFormatter

Пример

Создадим форматтер с часовым поясом Нью-Йорка и отформатируем текущее время:

kotlinimport java.time.ZonedDateTime
import java.time.ZoneId
import java.time.format.DateTimeFormatter

val formatter = DateTimeFormatter.ISO_ZONED_DATE_TIME
val nyFormatter = formatter.withZone(ZoneId.of("America/New_York"))

val currentTime = ZonedDateTime.now()
val formatted = nyFormatter.format(currentTime)
println(formatted)

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

kotlinString "2025-09-10T06:30:45.123-04:00[America/New_York]"

Пример

Парсинг строки с датой-временем с использованием форматтера с определенным часовым поясом:

kotlinimport java.time.ZonedDateTime
import java.time.ZoneId
import java.time.format.DateTimeFormatter

val dateStr = "2025-12-31T23:59:59Z"
val formatter = DateTimeFormatter.ISO_DATE_TIME.withZone(ZoneId.of("Europe/London"))

val zonedDateTime = ZonedDateTime.parse(dateStr, formatter)
println(zonedDateTime)

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

kotlinString "2025-12-31T23:59:59Z[Europe/London]"

Пример

Сравнение форматирования с разными часовыми поясами:

kotlinimport java.time.ZonedDateTime
import java.time.ZoneId
import java.time.format.DateTimeFormatter

val zdt = ZonedDateTime.now()
val baseFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss z")

val tokyoFormatter = baseFormatter.withZone(ZoneId.of("Asia/Tokyo"))
val londonFormatter = baseFormatter.withZone(ZoneId.of("Europe/London"))

println("Tokyo: " + tokyoFormatter.format(zdt))
println("London: " + londonFormatter.format(zdt))

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

kotlinString "Tokyo: 2025-09-10 19:30:45 JST"
String "London: 2025-09-10 11:30:45 BST"

Пример

Использование системного часового пояса по умолчанию:

kotlinimport java.time.ZonedDateTime
import java.time.ZoneId
import java.time.format.DateTimeFormatter

val formatter = DateTimeFormatter.ISO_ZONED_DATE_TIME.withZone(ZoneId.systemDefault())
val currentTime = ZonedDateTime.now()

println(formatter.format(currentTime))

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

kotlinString "2025-09-10T14:30:45.123+03:00[Europe/Moscow]"

Смотрите также

  • метод ofPattern класса DateTimeFormatter,
    который создает форматтер по шаблону
  • метод format класса DateTimeFormatter,
    который форматирует дату-время в строку
  • метод parse класса DateTimeFormatter,
    который парсит строку в дату-время
  • класс ZoneId,
    который представляет идентификатор часового пояса