无法使用SimpleParseDate.parse检查有效日期

时间:2014-09-29 09:27:54

标签: java simpledateformat

我正在尝试检查验证日期。以下是我的代码。当我检查日期 12/12 / 2014XYZ 时,SimpleDateFormat.parse不会抛出异常。对于其他无效日期,例如 13/13/2014 ,它会抛出异常。

public class DateCheck{

    public static void main(String[] args) {
        SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
        sdf.setLenient(false);
        try {
            sdf.parse("12/31/2014XYZ");
            System.out.println("Valid Date");
        } catch (Exception e) {
            System.out.println("Invalid Date");

        }
    }
}

我google了很多但找不到合适的解决方案。

4 个答案:

答案 0 :(得分:3)

使用ParsePosition,如下所示:

try {
    String input = "12/31/2014XYZ";

    ParsePosition pp = new ParsePosition(0);
    sdf.parse(input, pp);

    // Make sure the entire string was parsed
    if (pp.getIndex() != input.length())
        throw new Exception();

    System.out.println("Valid Date");
} catch (Exception e) {
    System.out.println("Invalid Date");
}

类似的问题:

答案 1 :(得分:0)

这是Javadoc

中所述
  

从给定字符串的开头解析文本以生成日期。 该方法可能不会使用给定字符串的整个文本。

所以你的观察是预期和描述的行为。

答案 2 :(得分:0)

正如你告诉日期格式“MM / dd / yyyy”所以它只检查“/”之后的前四个字符

如果您将日期写为“12/31 / XYZ2014”,则会抛出异常并打印无效日期。

答案 3 :(得分:0)

来自Java doc

  

从给定字符串的开头解析文本以生成日期。   该方法可能不会使用给定字符串的整个文本。

因此,12/31/2014仅从12/31/2014XYZ开始,并采用有效格式。

例如:

SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
try {
    java.util.Date date=sdf.parse("12/31/2014AnyThing");
    System.out.println("Valid Date "+date);
   } catch (ParseException e) {
    System.out.println("Invalid Date");
   }
try {
    java.util.Date date=sdf.parse("AnyThing12/31/2014");
    System.out.println("Valid Date "+date);
   } catch (ParseException e) {
    System.out.println("Invalid Date");
  }

Out put:

  Valid Date Wed Dec 31 00:00:00 IST 2014
  Invalid Date

与此相同。

   SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
    try {
        java.util.Date date=sdf.parse("12/31/2014XYZ");
        System.out.println("Valid Date "+date);
    } catch (ParseException e) {
        System.out.println("Invalid Date");

    }

    try {
        java.util.Date date=sdf.parse("XYZ12/31/2014");
        System.out.println("Valid Date "+date);
    } catch (ParseException e) {
        System.out.println("Invalid Date");

    }

Out put:

   Valid Date Wed Dec 31 00:00:00 IST 2014
   Invalid Date

编辑:

@aioobe answer将提供不将其作为有效日期格式的解决方案。