2015-06-24 2 views
1

У меня есть следующий код:Java - Throw ошибки, когда некорректная дата

SimpleDateFormat formatDDMMYYY = new SimpleDateFormat("dd/MM/yyyy"); 
Calendar quotationDay = Calendar.getInstance(); 
try { 
    quotationDay.setTime(formatDDMMYYY.parse("06/13/2015")); 
} catch (ParseException e) { 
    throw new RuntimeException("Quotation date is in incorrect format."); 
} 

Дата «06/13/2015» неверно, так как нет 13 месяца. Java автоматически анализирует его до следующего месяца, в 2016 году. Есть ли способ предотвратить это и вызывать исключение?

+0

Возможно лучше: http://stackoverflow.com/questions/15336200/why-does-simpledateformat-parse-incorrect-date – assylias

ответ

6

Вы должны установить

formatDDMMYYY.setLenient(false); 

Проверить spec

3

Вы должны отключить снисходительность, как указано в docs

снисхождении

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

Когда календарь находится в режиме без снисходительного, он бросает исключение, если любого несоответствия в его полях календаря , Например, значение GregorianCalendar всегда производит значения DAY_OF_MONTH от 1 до длины месяца. Нежелательный GregorianCalendar генерирует исключение при вычислении его значений времени или значений поля календаря, если установлено значение вне диапазона.

 Смежные вопросы

  • Нет связанных вопросов^_^