我想对一个字符串进行日期验证:
private boolean validateDate(String date){
  boolean isValid = true;
  if(date != null){
    SimpleDateFormat formatter = new SimpleDateFormat("MM-dd-yyyy");
    try{
      formatter.parse(date);
    }
    catch(ParseException pe){
      System.out.println(pe.toString());
      isValid = false;
    }
    catch(Exception e){
      System.out.println(e.toString());
      isValid = false;
    }
  }
  else{
    isValid = false;
  }
  return isValid;
}
如果字符串是"adf"等等的非法字符返回值为false
但是如果字符串是"02-30-1996"等的非法日期,却能返回true,难道SimpleDateFormat的parse方法不能正确解析非法日期么?这个方法不是返回日期型么?二月三十号应该是非法日期,应该抛异常才对啊
请高手指教

解决方案 »

  1.   

    确实有这个问题,但是如果你将parse的结果返回给一个Date型,再进行打印,你会发现,实际上,parse方法已经将多余的日期追加了比如现在解析的是02-30-1996,返回的Date是1996年3月2日,如果你使用14-20-1999,返回的则是2000年2月20由此,SimpleDateformat的parse方法对于验证实际上已经做的很完善了,它剔除的对象应该是明显的错误类型,比如数字字符串中包含非法字符之类
      

  2.   

    如果你需要严格验证输入的字符串的话,还是自己再实现一个validate方法比较好,应该不是什么困难的事
      

  3.   

    看看这个能否帮助楼主:http://www.graphics.net.cn/document/java/011/129.asp