Класс Java 8 ZonedDateTime представляет момент на универсальной временной шкале с информацией о часовом поясе. В этом уроке мы научимся анализировать строку в объект ZonedDateTime с помощью его метода parse().
1. Анализ даты и времени с помощью ZonedDateTime.parse()
Программа Java для преобразования заданной строки в экземпляр ZonedDateTime. После анализа даты мы преобразуем временную метку в наш локальный часовой пояс.
final static DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss a z");ZonedDateTime zdtWithZoneOffset = ZonedDateTime.parse("2019-03-27 10:15:30 am -05:00", formatter);ZonedDateTime zdtInLocalTimeline = zdtWithZoneOffset.withZoneSameInstant(ZoneId.systemDefault());System.out.println(zdtWithZoneOffset);System.out.println(zdtInLocalTimeline);
Вывод программы.
2019-03-27T10:15:30-05:002019-03-27T20:45:30+05:30[Asia/Calcutta]
2. Преобразование строки в местный или предпочтительный часовой пояс
Иногда у нас будет строка даты-времени без информации о зоне, например, клиент прислал нам таблицу Excel с записями о продажах. В таких случаях мы можем захотеть проанализировать даты с предпочтительным часовым поясом.
Один из хороших способов выполнить такой анализ — сначала проанализировать строку до LocalDateTime, а затем добавить информацию о зоне к экземпляру.
LocalDateTime ldt = LocalDateTime.parse("2019-03-27 10:15:30 am", formatterWithoutZone);ZonedDateTime zdt = ZonedDateTime.of(ldt, ZoneId.systemDefault());System.out.println(zdt);
3. Модели дат
3.1. Шаблон по умолчанию
Шаблон даты по умолчанию — DateTimeFormatter.ISO_ZONED_DATE_TIME.
Формат состоит из:
- ISO_LOCAL_DATE
- Буква «Т». Синтаксический анализ нечувствителен к регистру.
- ISO_LOCAL_TIME
- Идентификатор смещения. Если смещение содержит секунды, то они будут обработаны, даже если это не является частью стандарта ISO-8601. Анализ нечувствителен к регистру.
- Если идентификатор зоны недоступен или равен ZoneOffset, то форматирование завершено.
- Открытая квадратная скобка '['.
- Идентификатор зоны. Это не часть стандарта ISO-8601. Анализ чувствителен к регистру.
- Закрывающая квадратная скобка ']'.
3.2 Пользовательские шаблоны
Существуют и другие полезные встроенные шаблоны, которые можно использовать для анализа дат в экземплярах ZonedDateTime.
- RFC_1123_DATE_TIME – Форматировщик даты и времени RFC-1123, например «Вт, 3 июня 2008 г. 11:05:30 GMT».
- ISO_OFFSET_DATE_TIME – форматировщик даты и времени ISO, который форматирует или анализирует дату и время со смещением, например «2011-12-03T10:15:30+01:00».
- ISO_ZONED_DATE_TIME – форматировщик даты и времени в стиле ISO, который форматирует или анализирует дату и время со смещением и зоной, например, «2011-12-03T10:15:30+01:00[Европа/Париж]».