3

我有以下片段

Date date=null;
    SimpleDateFormat sdf=new SimpleDateFormat("dd-MM-yyyy");
    try {
        date= sdf.parse("2001-02-2012");
        System.out.println(date);
    } catch (ParseException ex) {
        ex.printStackTrace();
    }

奇怪的是它不会抛出解析异常,不是吗?

4

3 回答 3

3

问题是您的输入有点出乎意料。SimpleDateFormat 然后尝试以有用的方式解释它。因此,在您的情况下,有些2001天会简单地转换为周、月和年。你的日期是Mon Jul 24 00:00:00 GMT 2017。您可以在 ideone 上查看:http: //ideone.com/bfgogz

要“修复”它,您可以添加一个sdf.setLenient(false);以仅接受与您指定的方式完全相同的输入。

于 2013-02-12T09:53:07.863 回答
2

会计。到文档:

public Date parse(String source) throws ParseException

从给定字符串的开头解析文本以生成日期。该方法可能不会使用给定字符串的整个文本

throws ParseException- 如果指定字符串的开头无法解析。

请参阅:日期格式

于 2013-02-12T09:48:05.987 回答
2

ParseException如果你不宽容地解析它 ,它会抛出。DateFormat#setLenient(false)它也知道严格解析

指定日期/时间解析是否宽松。通过宽松的解析,解析器可以使用启发式方法来解释不精确匹配该对象格式的输入。使用严格的解析,输入必须匹配这个对象的格式。

文档-

SimpleDateFormat sdf=new SimpleDateFormat("dd-MM-yyyy");
sdf.setLenient(false);
try{
    date = sdf.parse("2001-02-2012");
    System.out.println(date);
} catch (ParseException ex) {
    ex.printStackTrace();
}

结果 -

java.text.ParseException: Unparseable date: "2001-02-2012"

注意:默认Dateformat/SimpleDateFormat情况下,解析宽松。

于 2013-02-12T09:50:35.293 回答