Анализ даты не завершается ошибкой с недопустимым форматом

#java #date #parsing #date-format #simpledateformat

#java #Дата #синтаксический анализ #дата-формат #simpledateformat

Вопрос:

Приведенный ниже фрагмент кода должен вызывать исключение синтаксического анализа, согласно моему пониманию, но это не так. Просмотрел документацию, но не смог разобраться.

 DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd", Locale.US);
dateFormat.setLenient(false);
dateFormat.parse("20160821_$folder$");
  

Комментарии:

1. При использовании Java 8 вы можете использовать DateTimeFormatter, который является строгим и будет генерировать исключение в вашем примере.

Ответ №1:

Это то, что говорит javadoc:

Анализирует текст с начала заданной строки для получения даты. Метод может использовать не весь текст данной строки.

Пока он находит совпадение, он прекращает дальнейшее сканирование, что, по-видимому, имеет место здесь.

Если вы хотите строгую проверку, вы можете добавить RegEx сопоставление поверх этого, чтобы предотвратить анализ таких строк.

Комментарии:

1. Это объясняет это. Интересно, почему они не используют флаг снисходительности. Но, поскольку это задокументировано, это не ошибка.