Java - выдает ошибку, когда дата недействительна

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

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.");
}

Дата "13.06.2015" неверна, поскольку 13-го месяца нет. Java автоматически анализирует его на следующий месяц, в 2016 году. Можно ли как-то предотвратить это и выдать исключение?

2 ответа

Решение

Вам нужно установить

formatDDMMYYY.setLenient(false);

Проверьте спецификацию

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

снисходительность

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

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

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