那就在转回成字符串。看看一样了不?
这是我曾经写过的一个验证器的代码:public class IsDateValidator extends Validator{
    public IsDateValidator(Validator validator) {
        super(validator);
    }    public IsDateValidator(String value) {
        super(value);
    }    protected IsDateValidator() {
    }    public boolean validate() {
        try {
            value = value.replaceAll("-0+", "-");
            Date date = FORMAT.parse(value);
            String newDateStr = FORMAT.format(date);
            return value.equals(newDateStr) && super.validate();
        } catch (ParseException e) {
            return false;
        }
    }    private static final SimpleDateFormat FORMAT = new SimpleDateFormat("yyyy-M-d");
}

解决方案 »

  1.   

    不好意思,之前的问题忘记说明运行环境了。
    运行环境:jdk1.4,编译标准:1.3谢谢dext的回答。
    我刚才按照你的提示,将日期再转为字符串比较了下。
    运行环境:jdk1.5,编译标准:1.5
    在这个环境下,程序一:严格遵守该格式的情况
            String   l_strDate   =   "2006060A";
            SimpleDateFormat   l_sdf   =   new   SimpleDateFormat("yyyyMMdd");
            l_sdf.setLenient(false);//设置严格遵守该格式转型
            Date l_dat = l_sdf.parse(l_strDate); 
            String l_str = l_sdf.format(l_date);
            System.out.println(l_strDate.equals(l_str) + "  l_str = " + l_str);
    结果:
    java.text.ParseException: Unparseable date: "2006060A"
    at java.text.DateFormat.parse(DateFormat.java:335)
    at package1.Main.testDateFormat(Main.java:34)
    at package1.Main.main(Main.java:13)程序二:不严格遵守该格式转型的情况
            String   l_strDate   =   "2006060A";
            SimpleDateFormat   l_sdf   =   new   SimpleDateFormat("yyyyMMdd");
            l_sdf.setLenient(false);//设置可以不严格遵守该格式转型
            Date l_dat = l_sdf.parse(l_strDate); 
            String l_str = l_sdf.format(l_date);
            System.out.println(l_strDate.equals(l_str) + "  l_str = " + l_str);
    结果:
      NO  l_str = 20060531在1.5的环境下看起来貌似是正常执行了。
    那么请问:
       在1.4的环境下,SimpleDateFormat的parse方法能将“2006060A”正常转型,是不是1.4的一个bug???
      

  2.   

    不好意思
    程序二的    l_sdf.setLenient(false); 写错了。
    应该是l_sdf.setLenient(true);