一尘不染

当str = 2011/12 / 12aaaaaaaaaaa时,SimpleDateFormat parse(string str)不会引发异常?

java

这是一个例子:

public MyDate() throws ParseException {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/d");
    sdf.setLenient(false);
    String t1 = "2011/12/12aaa";
    System.out.println(sdf.parse(t1));
}

2011/12 / 12aaa不是有效的日期字符串。但是,该函数将打印“ PST 2011 Mon Dec 12 00:00:00 PST
2011”,并且不会引发ParseException。

谁能告诉我如何让SimpleDateFormat将“ 2011/12 / 12aaa”视为无效的日期字符串并引发异常?


阅读 209

收藏
2020-09-08

共1个答案

一尘不染

JavaDoc on parse(...)指出以下内容:

解析不一定使用所有字符,直到字符串末尾

似乎无法SimpleDateFormat抛出异常,但是可以执行以下操作:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/d");
sdf.setLenient(false);
ParsePosition p = new ParsePosition( 0 );
String t1 = "2011/12/12aaa";    
System.out.println(sdf.parse(t1,p));

if(p.getIndex() < t1.length()) {
  throw new ParseException( t1, p.getIndex() );
}

基本上,您检查解析是否消耗了整个字符串,如果不是,则输入无效。

2020-09-08