java – SimpleDateFormat parse(string str)在str = 2011/12 / 12aaaaaaaaa时不会引发异常?

这是一个例子:
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不是有效的日期字符串.但是该功能打印“2011年12月12日星期一00:00:00 PST”,并且不会抛出ParseException.

任何人都可以告诉我如何让SimpleDateFormat将“2011/12 / 12aaa”视为无效的日期字符串并抛出异常?

解决方法

解析(…)中的JavaDoc说明如下:

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

看来,您无法使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() );
}

基本上,您检查分析是否消耗整个字符串,如果不是您有无效的输入.

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...