Я пытался преобразовать строки в даты. Некоторые из них появляются так: 1011970 (как на 1 января 1970 года), а некоторые появляются так: 10011970 (как на 1 октября 1970 года). Тот факт, что месяц в начале, создал для меня большую проблему.
Я уже пришел к решению, что я могу просто проверить, сколько цифр имеет число и использовать отдельные средства форматирования, но я бы предпочел использовать что-то более элегантное. Я пытался использовать DateTimeFormatterBuilder для создания форматера «один размер подходит всем». Вот пример чего-то, что я попробовал, и полученного результата.
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.appendValue(ChronoField.MONTH_OF_YEAR, 1, 2, SignStyle.NORMAL)
.appendPattern("ddyyyy")
.toFormatter();
System.out.println(LocalDate.parse("10011970", formatter));
System.out.println(LocalDate.parse("1011970", formatter));
Date: 1970-10-01
Exception in thread "main" java.time.format.DateTimeParseException: Text '1011970' could not be parsed at index 4
at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949)
at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851)
at java.time.LocalDate.parse(LocalDate.java:400)
at Main.main(Main.java:36)
Так что, как вы можете видеть, вышеупомянутое решение работает для первой отформатированной даты, но не для второй. Пожалуйста, дайте мне знать, если у вас есть идеи.
Заранее спасибо! Джеймс