Анализ строки в ZonedDateTime в Java

Класс 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[Европа/Париж]».

Исходный код на Github

Прокрутить вверх