未捕获日期格式异常

时间:2015-03-29 16:36:45

标签: java

public OrderDate(String date) throws IllegalDateFormatException {   
  SimpleDateFormat dateFormat = new SimpleDateFormat("dd/mm/yy");
  try {
    dateFormat.parse(date);
    this.date = date;
  } catch (ParseException e) {
    throw new IllegalDateFormatException("Date must have the following format: dd/mm/yy");
  }
}

如果我使用例如32/05/12 - 它不会抛出异常。

我也尝试过:Date givenDate = dateFormat.parse(date);

需要澄清。

更新

public OrderDate(String date) throws IllegalDateFormatException
{   
    SimpleDateFormat dateFormat = new SimpleDateFormat("dd/mm/yy");
    try 
    {
        dateFormat.setLenient(false);
        dateFormat.parse(date);
        this.date = date;
    }
    catch(ParseException e) 
    {
        throw new IllegalDateFormatException("Date must have the following"
                                                     + " format: dd/mm/yy");
    }
}

它捕获异常,如果日期是32/06/12!同时,如果日期是2003年6月31日,则没有任何问题。但是六月有30天了!

1 个答案:

答案 0 :(得分:1)

默认情况下,setLenient的{​​{1}}为SimpleDateFormat。因此,无论何时解析true,它都会自动转换为32/05/12。这就是为什么不会抛出异常的原因。如果您需要严格解析而不是使用01/06/12,则会在上述情况下抛出setLenient(false)。查看docs

  

指定日期/时间解析是否宽松。同   宽松解析,解析器可以使用启发式来解释输入   与该对象的格式不完全匹配。通过严格的解析,   输入必须与此对象的格式匹配。

相关问题