SimpleDateFormat parse(string str) doesn't throw an exception when str = 2011/12/12aaaaaaaaa?

前端 未结 7 1858
野的像风
野的像风 2020-11-27 08:06

Here is an example:

public MyDate() throws ParseException {
    SimpleDateFormat sdf = new SimpleDateFormat(\"yyyy/MM/d\");
    sdf.setLenient(false);
    St         


        
7条回答
  •  囚心锁ツ
    2020-11-27 08:28

    The JavaDoc on parse(...) states the following:

    parsing does not necessarily use all characters up to the end of the string

    It seems like you can't make SimpleDateFormat throw an exception, but you can do the following:

    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() );
    }
    

    Basically, you check whether the parse consumed the entire string and if not you have invalid input.

提交回复
热议问题