Текст '28Feb2020' не может быть проанализирован, не проанализированный текст найден в индексе 7

Введите текст 20FEB2020

Следующий блок кода генерирует DateTimeParseExceptionс сообщением Текст '28Feb2020' не может быть проанализирован, не проанализированный текст найден в индексе 7 :

      String issueDate = abcIssueDate.substring(0, 3)
                  + abcIssueDate.substring(3).toLowerCase();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("ddMMMyy", Locale.US);
LocalDate localDate = LocalDate.parse(issueDate, formatter);

1 ответ

Решение

Исключение, которое генерирует ваш блок кода, скорее всего, вызвано шаблоном вашего. Как уже было сказано под вашим вопросом, вы используете два yза год, состоящий из 4 цифр.
Итак, вы можете изменить шаблон на "ddMMMyyyy", который может сработать.

В качестве альтернативы вы можете напрямую проанализировать такой String который содержит аббревиатуры месяцев заглавными буквами без применения toLowerCase() на любом substring если вы создадите DateTimeFormatter который разбирает без учета регистра:

      public static void main(String[] args) throws IOException {
    String time = "20FEB2020";
    // build a DateTimeFormatter that parses case-insensitively
    DateTimeFormatter dtf = new DateTimeFormatterBuilder()
                                    .parseCaseInsensitive()
                                    .appendPattern("ddMMMuuuu")
                                    .toFormatter(Locale.ENGLISH);
    LocalDate localDate = LocalDate.parse(time, dtf);
    System.out.println(localDate);
}

Результат (неявно используя toString() метод LocalDate):

      2020-02-20
Другие вопросы по тегам