Форматировать ZonedDateTime в строку

Формат ZonedDateTime в строку

1. обзор

В этом кратком руководстве мы увидим, как преобразоватьZonedDateTime вString.

Мы также рассмотрим, как разобратьZonedDateTime изString.

2. СозданиеZonedDateTime

Сначала мы начнем сZonedDateTime с часовым поясом в формате UTC. Есть несколько способов сделать это.

Мы можем указать год, месяц, день и т. Д .:

ZonedDateTime zonedDateTimeOf = ZonedDateTime.of(2018, 01, 01, 0, 0, 0, 0, ZoneId.of("UTC"));

Мы также можем создатьZonedDateTime из текущей даты и времени:

ZonedDateTime zonedDateTimeNow = ZonedDateTime.now(ZoneId.of("UTC"));

Или мы можем создатьZonedDateTime из существующегоLocalDateTime:

LocalDateTime localDateTime = LocalDateTime.now();
ZonedDateTime zonedDateTime = ZonedDateTime.of(localDateTime, ZoneId.of("UTC"));

3. ZonedDateTime доString

Теперь давайте преобразуем нашZonedDateTime вString.. Для этогоwe’ll use the DateTimeFormatter class.

Есть несколько специальных форматеров, которые мы можем использовать для отображения данных часового пояса. Полный список средств форматирования можно найти вhere, но мы рассмотрим несколько наиболее распространенных.

Если нам нужен форматтерto display the time zone offset, we can use the“Z” or “X”:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy - HH:mm:ss Z");
String formattedString = zonedDateTime.format(formatter);

Это даст нам такой результат:

02/01/2018 - 13:45:30 +0000

Чтобы включить название часового пояса, мы можем использовать строчную букву «z»:

DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("MM/dd/yyyy - HH:mm:ss z");
String formattedString2 = zonedDateTime.format(formatter2);

Выход этого будет:

02/01/2018 - 13:45:30 UTC

4. String доZonedDateTime

Этот процесс также может работать в обратном порядке. Мы можем взять строку и преобразовать ее обратно вZonedDateTime.

Один из вариантов сделать это - использоватьstatic parse() method of the ZonedDateTime class:

ZonedDateTime zonedDateTime = ZonedDateTime.parse("2011-12-03T10:15:30+01:00");

В этом методе используется форматировщикISO_ZONED_DATE_TIME. Также существует перегруженная версия метода, которая принимает параметрDateTimeFormatter. Однако строка должна содержать идентификатор зоны, иначе мы получим исключение:

assertThrows(DateTimeParseException.class, () ->
  ZonedDateTime.parse("2011-12-03T10:15:30", DateTimeFormatter.ISO_DATE_TIME));

Второй вариант полученияZonedDateTime изString включает 2 шага:converting the String to a LocalDateTime, then this object to a ZonedDateTime:

ZoneId timeZone = ZoneId.systemDefault();
ZonedDateTime zonedDateTime = LocalDateTime.parse("2011-12-03T10:15:30",
  DateTimeFormatter.ISO_DATE_TIME).atZone(timeZone);

log.info(zonedDateTime.format(DateTimeFormatter.ISO_ZONED_DATE_TIME));

Этот косвенный метод просто комбинирует дату и время с идентификатором зоны:

INFO: 2011-12-03T10:15:30+02:00[Europe/Athens]

Чтобы узнать больше о синтаксическом анализе String по датам, ознакомьтесь с нашим более подробным анализом датыarticle.

5. Заключение

В этой статье мы увидели, как создатьZonedDateTime и как отформатировать его какString.

Мы также быстро рассмотрели, как анализировать строку даты и времени и преобразовывать ее вZonedDateTime.

Исходный код этого руководства доступенover on Github.