Метод withZone
Метод withZone класса DateTimeFormatter устанавливает часовой пояс для форматтера.
В параметр мы передаем объект ZoneId, представляющий часовой пояс. Метод возвращает новый форматтер с установленным часовым поясом,
при этом исходный форматтер остается неизменным.
Импорт
import java.time.format.DateTimeFormatter
import java.time.ZoneId
Синтаксис
fun withZone(zone: ZoneId): DateTimeFormatter
Пример
Создадим форматтер с часовым поясом Нью-Йорка и отформатируем текущее время:
import 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)
Результат выполнения кода:
String "2025-09-10T06:30:45.123-04:00[America/New_York]"
Пример
Парсинг строки с датой-временем с использованием форматтера с определенным часовым поясом:
import 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)
Результат выполнения кода:
String "2025-12-31T23:59:59Z[Europe/London]"
Пример
Сравнение форматирования с разными часовыми поясами:
import 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))
Результат выполнения кода:
String "Tokyo: 2025-09-10 19:30:45 JST"
String "London: 2025-09-10 11:30:45 BST"
Пример
Использование системного часового пояса по умолчанию:
import 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))
Результат выполнения кода:
String "2025-09-10T14:30:45.123+03:00[Europe/Moscow]"