Как преобразовать строку в дату
Короткий ответ
Строку в формате ISO (2026-03-08) понимает LocalDate.parse() без дополнительных настроек:
void main() {
LocalDate date = LocalDate.parse("2026-03-08");
IO.println(date);
IO.println(date.getDayOfWeek());
}Результат:
2026-03-08
SUNDAYСвой формат
Для других форматов передайте DateTimeFormatter с шаблоном:
void main() {
var formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy");
LocalDate date = LocalDate.parse("08.03.2026", formatter);
IO.println(date);
}Результат:
2026-03-08Дата и время
LocalDateTime.parse() разбирает строку с временем:
void main() {
var formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm");
LocalDateTime meeting = LocalDateTime.parse("15/04/2026 09:30", formatter);
IO.println(meeting);
IO.println(meeting.plusHours(2).toLocalTime());
}Результат:
2026-04-15T09:30
11:30Месяц словом
Если в строке название месяца, укажите язык:
void main() {
var formatter = DateTimeFormatter.ofPattern("d MMMM yyyy", Locale.ENGLISH);
IO.println(LocalDate.parse("8 March 2026", formatter));
}Результат:
2026-03-08Частая ошибка
Не обработать неверную строку. parse() выбрасывает DateTimeParseException:
void main() {
LocalDate.parse("2026-02-30");
}Результат:
Exception in thread "main" java.time.format.DateTimeParseException: Text '2026-02-30' could not be parsed: Invalid date 'FEBRUARY 30'
Caused by: java.time.DateTimeException: Invalid date 'FEBRUARY 30'Для пользовательского ввода оборачивайте разбор в try/catch.
Функции из этого ответа
- LocalDate.parse() — Разбирает дату из строки — в формате ISO (2025-03-14) или по шаблону.
- DateTimeFormatter.ofPattern() — Создаёт форматтер для вывода и разбора дат по шаблону вроде dd.MM.yyyy.