Поведение SimpleDateFormat

У меня есть следующие строки:

final SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date d = simpleDateFormat.parse("2004-52-05");

Я ожидаю, что исключение будет выдано в строке 2, потому что '52' не является допустимым месяцем, но код выполняется, и дата, сохраненная в объекте d, является

Sat Apr 05 00:00:00 EEST 2008

Может кто-нибудь объяснить мне, почему?

1 ответ

Решение

Если вы хотите создать объект даты, который строго соответствует вашему шаблону, установите для параметра lenient значение false.

Из Javadoc

Календарь имеет два режима для интерпретации полей календаря, снисходительный и не снисходительный. Когда Календарь находится в мягком режиме, он принимает более широкий диапазон значений поля календаря, чем создает. Когда календарь пересчитывает значения полей календаря для возврата методом get(), все поля календаря нормализуются. Например, снисходительный GregorianCalendar интерпретирует MONTH == ЯНВАРЬ, DAY_OF_MONTH == 32 как 1 февраля.

См. Это для получения дополнительной информации кредитор

Так что добавь это..

simpleDateFormat.setLenient(false);

Это бросит Exception как вы ожидали..

java.text.ParseException: Unparseable date: "2004-52-05"
Другие вопросы по тегам