Если вы не знаете формат заранее, вам следует перечислить фактические форматы, которые вы ожидаете, а затем попытаться проанализировать их.В случае неудачи попробуйте следующий.
Вот пример того, как заполнить значение по умолчанию.
В итоге вы получите что-то вроде этого:
DateTimeFormatter f = new DateTimeFormatterBuilder()
.appendPattern("ddMM")
.parseDefaulting(YEAR, currentYear)
.toFormatter();
LocalDate date = LocalDate.parse("yourstring", f);
Или, что еще лучше, вышеупомянутый класс форматирования поддерживает необязательные элементы .Оберните спецификатор года в квадратных скобках, и этот элемент будет необязательным.Затем вы можете указать значение по умолчанию: parseDefaulting
.
. Вот пример:
String s1 = "Oct 5 11:05:03";
String s2 = "Oct 5 1996 13:51:56"; // Year supplied
String format = "MMM d [uuuu ]HH:mm:ss";
DateTimeFormatter f = new DateTimeFormatterBuilder()
.appendPattern(format)
.parseDefaulting(ChronoField.YEAR, Year.now().getValue())
.toFormatter(Locale.US);
System.out.println(LocalDate.parse(s1, f));
System.out.println(LocalDate.parse(s2, f));
Примечание. Даты и время нелегки.Вы должны принять во внимание, что интерпретация даты часто зависит от локали, и это иногда приводит к неоднозначности.Например, строка даты «05/12/2018» означает 12 мая 2018 года, когда вы американец, но в некоторых европейских регионах это означает 5 декабря 2018 года. Вы должны знать об этом.