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 .