Форматирование даты из LocalDate в строку: Java.time

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Чтобы преобразовать LocalDate в String, используйте DateTimeFormatter:

Java
Скопировать код
LocalDate date = LocalDate.now();
String formattedDate = date.format(DateTimeFormatter.ofPattern("dd/MM/yyyy"));

Результатом будет дата в формате "30/04/2023". Настройте шаблон в соответствии с вашими требованиями.

Кинга Идем в IT: пошаговый план для смены профессии

Подробное руководство

Процесс форматирования

Показываю, как различные шаблоны DateTimeFormatter меняют представление LocalDate:

  • Полное название месяца: "dd MMMM yyyy" возвращает "30 апреля 2023".
  • Сокращенное название месяца: "dd MMM yyyy" преобразует в "30 апр 2023".
  • Инвертированный порядок: "yyyy/MM/dd" приводит к "2023/04/30".

Локализация

Не навязывайте использование своего Locale другим:

Java
Скопировать код
Locale locale = Locale.FRENCH;
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd MMMM yyyy", locale);
String formattedDate = date.format(formatter);

Такой код позволяет представить даты на французском языке.

Стандарт ISO-8601

Если с выбором собственного шаблона возникают сложности, воспользуйтесь стандартным форматом DateTimeFormatter.ISO_LOCAL_DATE:

Java
Скопировать код
String formattedDate = date.format(DateTimeFormatter.ISO_LOCAL_DATE);

Дата будет представлена в виде "2023-04-30", что соответствует стандарту ISO-8601.

Остерегайтесь устаревших решений

SimpleDateFormat хорошо известен пользователям java.util, однако он не подойдет для java.time!

Часовые пояса и ZonedDateTime

Для работы с часовыми поясами используйте ZonedDateTime:

Java
Скопировать код
ZonedDateTime zonedDate = date.atStartOfDay(ZoneId.systemDefault());
String formattedZonedDate = zonedDate.format(DateTimeFormatter.ofPattern("dd MMMM yyyy z"));

Визуализация

Пример неформатированного LocalDate:

Markdown
Скопировать код
Неотформатированный LocalDate : 2021-04-01

Пример отформатированного LocalDate:

Java
Скопировать код
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMMM dd, yyyy");
String formattedDate = date.format(formatter);

Результат форматирования:

Markdown
Скопировать код
Отформатированный LocalDate : 1 апреля 2021 года

Каждый формат подчеркивает уникальные аспекты LocalDate.

Внутренности шаблона

Шаблон определяет детали представления даты:

  • Ретро-стиль: "yy" сокращает 2023 год до "23".
  • Полное обозначение: "uuuu" показывает год полностью, т.е. "2023".

Обработка ошибок

Если формат некорректен, DateTimeParseException поможет отловить ошибку:

Java
Скопировать код
try {
    LocalDate date = LocalDate.parse("01-04-2023", formatter);
} catch (DateTimeParseException e) {
    e.printStackTrace();
}

Совместимость со старыми версиями Java

Для Java 6 или 7 доступен ThreeTen-Backport, библиотека, которая обеспечивает доступ к функциональности java.time.

Полезные материалы

  1. DateTimeFormatter (Java SE 8) — Обстоятельное руководство по использованию DateTimeFormatter.
  2. Самые высоко оцененные вопросы о 'localdate' – Stack Overflow — Лучшие рекомендации и практические примеры работы с LocalDate.
  3. Дата и время в Java SE 8 — Подробное изложение API даты и времени в Java 8.
  4. Java LocalDate – Javatpoint — Исчерпывающее руководство по работе с LocalDate.
  5. Java LocalDate — Мастер-класс по использованию LocalDate от Дженкова.