我有以下代码片段
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();
}奇怪的是,它不会抛出parse异常,不是吗?
发布于 2013-02-12 17:53:08
问题是你的输入有点出乎意料。然后,SimpleDateFormat尝试以一种有用的方式来解释它。因此,在您的例子中,有2001天,然后简单地转换为周、月和年。你的约会对象是Mon Jul 24 00:00:00 GMT 2017。你可以在ideone上查看:http://ideone.com/bfgogz
要“修复”它,您可以添加一个sdf.setLenient(false);,使其只接受与您指定的输入完全相同的输入。
发布于 2013-02-12 17:48:06
Acc.至文档:
public Date parse(String source) throws ParseException从给定字符串的开头解析文本以生成日期。该方法不能使用给定字符串的整个文本。
和
抛出
ParseException-如果无法解析指定字符串的开头的。
请参阅:DateFormat
发布于 2013-02-12 17:50:35
如果你不严格地解析它,它会抛出ParseException。严格解析也是众所周知的严格解析。
指定日期/时间解析是否宽松。通过宽松的解析,解析器可以使用启发式方法来解释与此对象的格式不完全匹配的输入。有了严格的解析,输入必须与这个对象的格式匹配。
Documentation -
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会进行宽松的解析。
https://stackoverflow.com/questions/14829545
复制相似问题