Java DateTimeFormatter (с примерами)

Представленный в изменениях API даты и времени Java 8, класс DateTimeFormatter помогает единообразно анализировать и печатать объекты даты и времени в различных встроенных и пользовательских шаблонах форматирования. Его экземпляры потокобезопасны и неизменяемы ; и могут использоваться без возникновения проблем с параллелизмом.

В этом уроке мы научимся создавать экземпляр DateTimeFormatter и использовать предопределенные и пользовательские шаблоны для форматирования следующих типов:

  • ЗонированныйДатаВремя
  • ЛокальнаяДатаВремя
  • Локальная дата
  • Местное время
 // Создание DateTimeFormatter для информации о дате и времени, включая часовой поясpublic static final DateTimeFormatter ZDT_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss az");//ФорматированиеСтрока formettedOutput = ZDT_FORMATTER.format( ZonedDateTime.now() ); //2023-04-26 15:28:29 IST//РазборZonedDateTime zdt = ZonedDateTime.parse(inputString, ZDT_FORMATTER); //inputString предоставляется пользователем

1. Шаблоны форматирования, используемые с DateTimeFormatter

Экземпляр DateTimeFormatter всегда связан с шаблоном форматирования, с которым он создан. Мы можем использовать встроенный шаблон или предоставить пользовательский шаблон.

1.1. Готовые экземпляры

Существует два способа ссылаться на встроенные шаблоны:

DateTimeFormatter.ISO_LOCAL_DATE.format(LocalDate.of(2023, 4, 25));
  • Использование одного из следующих готовых локализованных стилей с FormatStyle.
ФорматСтиль Пример шаблона
ПОЛНЫЙ Вторник, 25 апреля 2023 г.
ДЛИННЫЙ 25 апреля 2023 г.
СЕРЕДИНА 25 апр. 2023 г.
КОРОТКИЙ 4/25/23
DateTimeFormatter customFormatter = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.LONG );

1.2 Пользовательские шаблоны

Мы можем предоставить пользовательский шаблон, созданный с использованием символов шаблона, таких как «uuuu-MMM-dd», и использовать метод ofPattern() для создания нового экземпляра.

DateTimeFormatter customFormatter = DateTimeFormatter.ofPattern("MM/dd/yyyy 'at' hh:mma z");

1.3. DateTimeFormatterBuilder для построения сложных шаблонов

Используйте DateTimeFormatterBuilder для создания более сложного экземпляра форматировщика.

DateTimeFormatter formatter = new DateTimeFormatterBuilder().parseCaseInsensitive().append(DateTimeFormatter.ISO_LOCAL_DATE_TIME).optionalStart().appendPattern(".SSS").optionalEnd().optionalStart().appendZoneOrOffsetId().optionalEnd().optionalStart().appendOffset("+HHMM", "0000").optionalEnd().toFormatter();

2. Форматирование с помощью DateTimeFormatter

2.1 Синтаксис

Класс DateTimeFormatter предоставляет в основном один метод для форматирования заданного экземпляра даты-времени типа TemporalAccessor, который является базовым типом интерфейса для объектов даты, времени и смещения. Он форматирует экземпляр dateTimeObject, используя указанный формат.

String formattedOutput = formatter.format(TemporalAccessor temporal);

2.2. Формат ZonedDateTime, LocalDateTime, LocalDate, LocalTime

Мы видели пример форматирования ZonedDateTime в предыдущем разделе. Давайте научимся форматировать другие классы.

LocalDateTime не имеет части часового пояса, поэтому создайте соответствующий шаблон.

static final DateTimeFormatter FOMATTER = DateTimeFormatter.ofPattern("MM/dd/yyyy 'at' hh:mm a");String output = FOMATTER.format( LocalDateTime.now() ); // 07/15/2018 at 02:49 PM

LocalDate не имеет частей времени и часового пояса. Поэтому создайте шаблон соответствующим образом.

static final DateTimeFormatter FOMATTER = DateTimeFormatter.ofPattern("MM/dd/yyyy");String dateString = FOMATTER.format( LocalDate.now() ); // 07/15/2018 

LocalTime не содержит частей даты и часового пояса, поэтому создайте соответствующий шаблон.

static final DateTimeFormatter FOMATTER = DateTimeFormatter.ofPattern("hh:mm a");String localTimeString = FOMATTER.format( LocalTime.now() ); // 02:53 PM 

3. Анализ с помощью DateTimeFormatter

Мы можем использовать любой из созданных выше экземпляров DateTimeFormatter в методе parse(), чтобы получить экземпляр этого объекта даты/времени.

public static final DateTimeFormatter ZDT_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss a z");ZonedDateTime zdt = ZonedDateTime.parse( str, ZDT_FORMATTER );

4. Полезные пользовательские шаблоны для справки

Пользовательские шаблоны строятся с использованием специальных букв, которые имеют особое значение во время форматирования или анализа. Вот некоторые общие символы шаблонов:

  • 'г': год
  • «М»: месяц(в числовой форме, например, «1» для января)
  • «МММ»: сокращение месяца(например, «Янв»)
  • «ММММ»: полное название месяца(например, «Январь»)
  • 'd': день месяца
  • «E»: сокращение дня недели(например, «Пн»)
  • «EEEE»: полное название дня недели(например, «Понедельник»)
  • 'h': час(в формате 1-12)
  • «H»: час(в формате 0-23)
  • «м»: минута
  • 'с': второй
  • «S»: доля секунды
  • «a»: маркер AM/PM
  • «z»: сокращение часового пояса(например, «PST»)
  • «Z»: смещение часового пояса(например, «-0800»)

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

Шаблон Пример
гггг-ММ-дд( ISO ) «2018-07-14»
дд-МММ-гггг «14-июл-2018»
дд/ММ/гггг «14/07/2018»
Е, МММ дд гггг «Сб, 14 июля 2018»
ч:мм а «12:08 PM»
EEEE, MMM дд, гггг ЧЧ:мм:сс а «Суббота, 14 июля 2018 г., 14:31:06»
гггг-ММ-дд'Т'ЧЧ:мм:ссZ «2018-07-14T14:31:30+0530»
чч 'o''clock' a, zzzz «12 часов дня по тихоокеанскому летнему времени»
К:мм а, я «00:08 PM, PDT»

Исходный код Скачать

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