2015-06-24 16 views
1

我有以下代码:爪哇 - 抛出错误时的日期是无效的

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

的日期“2015年6月13日”不正确,因为没有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的解释MONTH == JANUARY,DAY_OF_MONTH == 32 2月1日

当日历是在非宽松模式下,将引发 有在其日历字段任何不一致的异常。例如,一个 GregorianCalendar始终会生成月份长度为1到 之间的DAY_OF_MONTH值。如果任何 超出范围的字段值已被设置,则非宽松的GregorianCalendar会在计算其时间或日历字段值时抛出 异常。