LocalDateTime.parse()
ожидает String
, который представляет действительную дату, которую year
часть.
Вы не можете установить год после вызова этого метода следующим образом:
LocalDateTime.parse(time, formatter).withYear(2018);
Год должен быть установлен раньше, потому что в противном случае parse()
выдает DateTimeParseException
.
В качестве обходного пути вы можете объединить текущий год во входных данных.
Некоторые дополнительные примечания:
- используемый вами шаблон и введенная дата в текстовом формате не совпадают точно.
- Вы не указываете
Locale
для операции разбора.
Это означает, что он будет работать в соответствии с локальной версией, где работает JVM.
Чтобы убедиться, что это работает в любом случае, вы должны указать Locale
.
Так что вы можете попробовать что-то вроде:
//date to parse
String time = "14:30 Sat 05 May";
time += " " + LocalDate.now().getYear();
//specify date format matching above string
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm EEE dd MMM yyyy", Locale.US) ;
//we do not have a year returned but i can make the assumption we use the current year
LocalDateTime formatDateTime = LocalDateTime.parse(time, formatter);