Рубрики
Без рубрики

Формат ЗонированDateTime к строке

Узнайте, как преобразовать зонаdDateTime в строку и наоборот на Java

Автор оригинала: baeldung.

1. Обзор

В этом быстром учебнике мы увидим, как преобразовать ЗонаdDateTime к струна.

Мы также посмотрим, как разобрать ЗонаdDateTime из струна.

2. Создание зоныDateTime

Во-первых, мы начнем с ЗонаdDateTime с часовой поясом UTC. Есть несколько способов, которыми мы можем достичь этого.

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

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

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

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

Или мы можем создать ЗонаdDateTime из существующего Местное время :

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

3. ЗонаdateTime к строке

Теперь давайте преобразуем нашу ЗонаdDateTime к струна. Для этого, Мы будем использовать ДатаTimeФорматер класс.

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

Если мы хотим для отображения смещения часового пояса мы можем использовать formatter “Кью” или “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. Строка к зонеDateTime

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

Один из вариантов сделать это с помощью статические разобрать () метод ЗонаdDateTime класс:

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

Этот метод использует ISO_ZONED_DATE_TIME форматер. Существует также перегруженная версия метода, которая занимает некоторое ДатаTimeФорматер параметр. Однако строка должна содержать идентификатор зоны, иначе мы получим исключение:

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

Второй вариант получения ЗонаdDateTime из Струнные включает в себя 2 шага: преобразование строки в МестноеdateTime, затем этот объект к ЗонаdDateTime:

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]

Чтобы узнать больше о разборе строки на сегодняшние даты, проверить наши более углубленные даты разбора статьи .

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

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

Мы также приняли быстрый взгляд на то, как разобрать строку времени даты и преобразовать в ЗонаdDateTime .

Исходный код для этого учебника доступен более на Github .