0

我想创建一种方法来使用SimpleDateFormat.

如果日期有效(例如02/09/2012or2/09/201202/9/2012),此方法应返回true

但是如果日期的格式错误(例如02/09/201X)或逻辑错误(例如32/09/2012),这个方法应该返回false

我试着这样写这个方法:

private boolean isValidDate(String date) {
        DateFormat df1 = new SimpleDateFormat("dd-MM-yyyy");
        DateFormat df2 = new SimpleDateFormat("d-MM-yyyy");
        DateFormat df3 = new SimpleDateFormat("dd-M-yyyy");
        Date d = null;
        String s = null;

        try {
            d = df1.parse(date);
        }catch (Exception e1) {
            try{
                d = df2.parse(date);
            }catch (Exception e2) {
                try {
                    d= df3.parse(date);
                }catch (Exception e3) {
                    return false;
                }
                s = df3.format(d);
                return date.equals(s);
            }
            s = df2.format(d);
            return date.equals(s);
        }
        s = df1.format(d);
        return date.equals(s);
    }

但是,如果我验证一个日期,例如 ,2/09/2012它会返回false(实际上它应该返回true)。我不知道为什么......谁能找到我的代码有什么问题,或者这个逻辑完全错误?有没有更好的方法来做这个验证?

4

4 回答 4

2

您的输入格式为 2/09/2012 而不是 2-09-2012,因此您的日期格式应如下所示:

    DateFormat df1 = new SimpleDateFormat("dd/MM/yyyy");
    DateFormat df2 = new SimpleDateFormat("d/MM/yyyy");
    DateFormat df3 = new SimpleDateFormat("dd/M/yyyy");
于 2012-10-11T14:44:54.330 回答
1

我认为您的代码很好(但不是非常可扩展 - 尝试在 for 循环中执行,以防您稍后添加更多格式)。

问题是您的格式字符串错误。而不是dd-MM-yyyy你应该有dd/MM/yyyy. 其余格式也是如此:

DateFormat df1 = new SimpleDateFormat("dd/MM/yyyy");
DateFormat df2 = new SimpleDateFormat("d/MM/yyyy");
DateFormat df3 = new SimpleDateFormat("dd/M/yyyy");
于 2012-10-11T14:46:15.693 回答
1

验证失败,因为/is not -

于 2012-10-11T14:46:20.203 回答
0

在解析每个字符串后添加这个额外的检查:

  1. 标记日期字符串的值
  2. 然后使用提取的日、月和年值使用 GregorianCalendar 创建一个新的 Date 对象
  3. 将此与您通过解析日期字符串创建的日期对象进行比较
  4. 如果它们匹配,则您知道输入字符串包含有效的日期格式
于 2012-10-11T14:47:47.987 回答