Форматирование даты из LocalDate в строку: Java.time
Быстрый ответ
Чтобы преобразовать LocalDate
в String
, используйте DateTimeFormatter
:
LocalDate date = LocalDate.now();
String formattedDate = date.format(DateTimeFormatter.ofPattern("dd/MM/yyyy"));
Результатом будет дата в формате "30/04/2023". Настройте шаблон в соответствии с вашими требованиями.
Подробное руководство
Процесс форматирования
Показываю, как различные шаблоны DateTimeFormatter
меняют представление LocalDate
:
- Полное название месяца:
"dd MMMM yyyy"
возвращает "30 апреля 2023". - Сокращенное название месяца:
"dd MMM yyyy"
преобразует в "30 апр 2023". - Инвертированный порядок:
"yyyy/MM/dd"
приводит к "2023/04/30".
Локализация
Не навязывайте использование своего Locale
другим:
Locale locale = Locale.FRENCH;
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd MMMM yyyy", locale);
String formattedDate = date.format(formatter);
Такой код позволяет представить даты на французском языке.
Стандарт ISO-8601
Если с выбором собственного шаблона возникают сложности, воспользуйтесь стандартным форматом DateTimeFormatter.ISO_LOCAL_DATE
:
String formattedDate = date.format(DateTimeFormatter.ISO_LOCAL_DATE);
Дата будет представлена в виде "2023-04-30", что соответствует стандарту ISO-8601.
Остерегайтесь устаревших решений
SimpleDateFormat
хорошо известен пользователям java.util
, однако он не подойдет для java.time
!
Часовые пояса и ZonedDateTime
Для работы с часовыми поясами используйте ZonedDateTime
:
ZonedDateTime zonedDate = date.atStartOfDay(ZoneId.systemDefault());
String formattedZonedDate = zonedDate.format(DateTimeFormatter.ofPattern("dd MMMM yyyy z"));
Визуализация
Пример неформатированного LocalDate
:
Неотформатированный LocalDate : 2021-04-01
Пример отформатированного LocalDate
:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMMM dd, yyyy");
String formattedDate = date.format(formatter);
Результат форматирования:
Отформатированный LocalDate : 1 апреля 2021 года
Каждый формат подчеркивает уникальные аспекты LocalDate
.
Внутренности шаблона
Шаблон определяет детали представления даты:
- Ретро-стиль:
"yy"
сокращает 2023 год до "23". - Полное обозначение:
"uuuu"
показывает год полностью, т.е. "2023".
Обработка ошибок
Если формат некорректен, DateTimeParseException
поможет отловить ошибку:
try {
LocalDate date = LocalDate.parse("01-04-2023", formatter);
} catch (DateTimeParseException e) {
e.printStackTrace();
}
Совместимость со старыми версиями Java
Для Java 6 или 7 доступен ThreeTen-Backport
, библиотека, которая обеспечивает доступ к функциональности java.time
.
Полезные материалы
- DateTimeFormatter (Java SE 8) — Обстоятельное руководство по использованию
DateTimeFormatter
. - Самые высоко оцененные вопросы о 'localdate' – Stack Overflow — Лучшие рекомендации и практические примеры работы с
LocalDate
. - Дата и время в Java SE 8 — Подробное изложение API даты и времени в Java 8.
- Java LocalDate – Javatpoint — Исчерпывающее руководство по работе с
LocalDate
. - Java LocalDate — Мастер-класс по использованию
LocalDate
от Дженкова.