DateTimeParseException для объекта LocalDateTime, несмотря на сопоставление форматаJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 DateTimeParseException для объекта LocalDateTime, несмотря на сопоставление формата

Сообщение Anonymous »

У меня есть приложение Java 8, которое должно принимать от пользователя любое количество форматов даты и времени. Очевидно, что это исчерпывающий список, поскольку существует множество способов записи даты и времени. Однако для целей локали это все даты в формате США (и да, я проверил, что локаль действительно en_US).
Однако то, что должно быть простой строкой даты/времени, имеет причинил мне много беспокойства. Вот мой код:

Код: Выделить всё

String dateString = // user generated thing

// Remove whitespace for simplicity's sake
dateString = dateString.replaceAll("\\s+", "");

// There are A LOT of formats here, but I only pasted a small number of them for
// simplicity's sake, including the format in question
DateTimeFormatterBuilder formatBuilder = new DateTimeFormatterBuilder()
.append(DateTimeFormatter.ofPattern("[MM/dd/yyyy]" + "[MM/dd/yy]" +
"[MM/dd/yyyyhh:mma]" + "[MM/dd/yyyyh:mma]" + "[MM-dd-yyyyhh:mma]"));

DateTimeFormatter formatter = formatBuilder
.parseDefaulting(ChronoField.HOUR_OF_DAY, 0)
.parseDefaulting(ChronoField.MINUTE_OF_HOUR, 0)
.parseDefaulting(ChronoField.SECOND_OF_MINUTE, 0)
.parseCaseInsensitive()
.toFormatter();

LocalDateTime ldt = LocalDateTime.parse(dateString, formatter);
При вводе строки «05.01.2024 15:41» (которая после удаления пробелов преобразуется в «05.01.202403:41pm») я в итоге получил ошибка:

Код: Выделить всё

java.time.format.DateTimeParseException: Text '01/05/202403:41pm' could not be parsed, unparsed text found at index 8
Изначально я не удалял пробелы, и форматы учитывали пробелы (т. е. у меня было «ММ/дд/гггг чч:мм а»). Это дало мне ошибку:

Код: Выделить всё

java.time.format.DateTimeParseException: Text '01/05/2024 03:41 pm' could not be parsed, unparsed text found at index 10
Как видите, я включил синтаксический анализ без учета регистра, поэтому строчные буквы am/pm не должны быть проблемой. Кроме того, он терпит неудачу по индексу 8 (вторая "2" в 2024 году) без пробелов и по индексу 10 (первый пробел) с пробелами.
Я подумал, возможно, с количеством форматов У меня есть (опять же, здесь показаны не все), возможно, было слишком много двусмысленности, поэтому я протестировал его, имея только форматы ММ/дд/гггг и «ММ/дд/гггг чч:мм а». (Для других дат мне нужен был первый ММ/дд/гггг). К сожалению, это тоже не сработало, поэтому я понятия не имею, что делать.

Подробнее здесь: https://stackoverflow.com/questions/790 ... mat-mapped
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»