Java - 日期无效时抛出错误

时间:2015-06-24 13:04:29

标签: java date-parsing

我有以下代码:

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年自动将其解析到下个月。有什么办法可以防止这种情况发生并抛出异常吗?

2 个答案:

答案 0 :(得分:6)

您需要设置

formatDDMMYYY.setLenient(false);

检查spec

答案 1 :(得分:3)

您应该按照docs

中的说明关闭宽大处理
  

从宽

     

Calendar有两种解释日历字段的方式,lenient   而且不宽容。当日历处于宽松模式时,它接受a   比它产生的更广泛的日历字段值。当一个日历   重新计算get()返回的日历字段值,全部   日历字段已标准化。例如,宽大   GregorianCalendar将MONTH == JANUARY,DAY_OF_MONTH == 32解释为   2月1日。

     

当Calendar处于非宽松模式时,如果是,则抛出异常   其日历字段中存在任何不一致之处。例如,a   GregorianCalendar总是生成介于1和之间的DAY_OF_MONTH值   这个月的长短。一个非宽松的GregorianCalendar抛出一个   计算其时间或日历字段值时的例外情况(如果有)   已设置超出范围的字段值。