模式是“dd-MM-yyyy”
我认为字符串“01-01-2010mwwwwwwwwwwwwwww”不满足模式,但下面的代码显示相反。
任何人都可以解释原因吗?
public static void main(String[] args) throws Exception {
SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy");
Date date = df.parse("01-01-2010mwwwwwwwwwwwwwww");
System.out.println(date);
}
由于
答案 0 :(得分:16)
parse方法不会尝试匹配整个输入字符串。也就是说,前缀01-01-2010
匹配,这就足够了。
从给定字符串的开头解析文本以生成日期。 该方法可能不会使用给定字符串的整个文本。
如果你需要来确定它是否是“完全匹配”,你可以尝试以下方法:
SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy");
String strDate = "01-01-2010mwwwwwwwwwwwwwww";
ParsePosition pp = new ParsePosition(0);
Date date = df.parse(strDate, pp);
System.out.println("Complete match: " + (pp.getIndex() == strDate.length()));
strDate = "01-01-2010";
pp = new ParsePosition(0);
date = df.parse(strDate, pp);
System.out.println("Complete match: " + (pp.getIndex() == strDate.length()));
打印
Complete match: false
Complete match: true
答案 1 :(得分:0)
这是因为DateFormat的默认宽松参数为true。这意味着解析器将解析输入字符串,即使它的格式不正确。哪个(有时)会导致错误的结果。
另一方面,我们可以强制解析器对给定模式严格。这意味着不正确的输入字符串将引发异常。
public static void main(String[] args) throws Exception {
SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy");
df.setLenient(false); // Switch to strict mode
Date date = df.parse("01-01-2010mwwwwwwwwwwwwwww"); // This will throw an exception
System.out.println(date);
}