ParseException при разборе 3-х символьного сокращенного месяца с использованием SimpleDateFormat

Вот мой код,

SimpleDateFormat format = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
Date dft  = (Date) format.parse("16-MAY-2018 09:30:22:000");

Я получаю ниже исключения

java.text.ParseException: Неразборчивая дата: "16 мая 2018 09:30:22"

Что нужно использовать для разбора миллисекунд?

5 ответов

Шаблон должен быть MMM, потому что в месяце три символа.

Вы также должны предпочесть java.time классы к тем, которые вы используете в настоящее время, если вы на Java 8 или выше:

DateTimeFormatter formatter = new DateTimeFormatterBuilder()
    .appendPattern("dd-MMM-yyyy")
    .appendLiteral(' ')
    .append(ISO_LOCAL_TIME)
    .toFormatter();

LocalDateTime timestamp = LocalDateTime.parse("16-May-2018 09:30:22", formatter);
Date dft  = (Date) format.parse("16-05-2018 09:30:22");

ИЛИ измените его на

SimpleDateFormat format = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss");

Используйте этот шаблон: дд-МММ-гггг ЧЧ: мм: сс

Вы используете дд-мм-гггг чч: мм: сс, так что разбор

16-05-2018 09:30:22

а если хочешь 16 мая 2018 09:30:22 то пользуйся

dd-MMM-yyyy HH:mm:ss

"16-MAY-2018 09:30:22" не разбирается с этим форматом времени. Если вы хотите разобрать, что вы должны изменить формат даты на "дд-ммм-гггг чч: мм: сс". Двойной М только для пронумерованных месяцев (так должно быть 05 для мая).

Проверьте SimpleDateFormat javadoc для более подробной информации: здесь

Другие вопросы по тегам