当str = 2011/12/12aaaaaaaaa时,SimpleDateFormat parse(string str)不会抛出异常?

Ter*_*ser 10 java simpledateformat parseexception

这是一个例子:

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));
}
Run Code Online (Sandbox Code Playgroud)

2011/12/12aaa不是有效的日期字符串.但是,该功能打印"2011年12月12日00:00:00 PST",并且不会抛出ParseException.

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

Tho*_*mas 12

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() );
}
Run Code Online (Sandbox Code Playgroud)

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


Sun*_*hoo 5

判断日期是否有效 如果日期有效,则返回以下方法,否则将返回false。

public boolean isValidDate(String date) {

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/d");
        Date testDate = null;
        try {
            testDate = sdf.parse(date);
        }
        catch (ParseException e) {
            return false;
        }
        if (!sdf.format(testDate).equals(date)) {
            return false;
        }
        return true;

    }
Run Code Online (Sandbox Code Playgroud)

看看下面的类,它可以检查日期是否有效

**示例示例**

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateValidCheck {


    public static void main(String[] args) {

        if(new DateValidCheck().isValidDate("2011/12/12aaa")){
            System.out.println("...date is valid");
        }else{
            System.out.println("...date is invalid...");
        }

    }


    public boolean isValidDate(String date) {

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/d");
        Date testDate = null;
        try {
            testDate = sdf.parse(date);
        }
        catch (ParseException e) {
            return false;
        }
        if (!sdf.format(testDate).equals(date)) {
            return false;
        }
        return true;

    }

}
Run Code Online (Sandbox Code Playgroud)