Формат даты с использованием apache lang DateUtil завершается неудачно

Я пытался преобразовать дату в строковом формате в дату, используя DateUtils, Ниже приведены мои ожидаемый формат даты,

private static final String[] EXPECTED_DATE_FORMAT = {"yyyy-MM-dd","dd-MM-yyyy","dd-MMM-yyyy",};

И я провел тест на следующие значения,

System.out.println(org.apache.commons.lang.time.DateUtils.parseDate("2019-05-18", EXPECTED_DATE_FORMAT));
System.out.println(org.apache.commons.lang.time.DateUtils.parseDate("18-05-2019", EXPECTED_DATE_FORMAT));
System.out.println(org.apache.commons.lang.time.DateUtils.parseDate("18-May-2019", EXPECTED_DATE_FORMAT));

И я получаю следующий результат,

Sat May 18 00:00:00 IST 2019
Tue Nov 09 00:00:00 IST 23
Sat May 18 00:00:00 IST 2019

Почему второе значение?18-05-2019"не соответствует формату"dd-MM-yyyy"и получить мне тот же результат? Какие изменения я должен поддержать оба dd-MM-yyyy а также yyyy-MM-dd?

2 ответа

Решение

Это вызвано тем, что DateUtils.parseDate внутренне использует SimpleDateFormat с "мягким разбором" (SimpleDateFormat.setLenient(true)). Слабый синтаксический анализ означает, примерно, что, если строка не соответствует точно шаблону, анализатор пытается эвристически "угадать", как интерпретировать вашу строку, чтобы получить какую-то значимую дату. В вашем примере вторая строка завершается неудачно, потому что первый шаблон считается "достаточно хорошим" для использования, а затем анализатор все портит.

Ты можешь использовать DateUtils.parseDateStrictly отключить снисходительность.

Вместо этого вы должны использовать метод DateUtils#parseDateStrictly

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