Jtextfield中指定格式的日期验证

时间:2014-03-04 04:50:13

标签: java swing validation datetime swingx

我需要以指定的格式验证日期,其中两个输入仅在JTextfield的运行时中给出,并且将动态更改。以下是我尝试过的代码:

 Date dd = new Date();
    DateFormat df = new SimpleDateFormat(Date_format_text.getText());
    try {

        df.setLenient(false);
        Date d1 = df.parse(Lower_date_text.getText());
        System.out.println("Correct");
        validator_LD.setVisible(false);

    } catch (ParseException p) {

        validator_LD.setText("*Not in mentioned Format '" + df.format(dd) + "'");
        validator_LD.setVisible(true);

        System.out.println("Wrong");

    }

以上是..我得到指定的日期和从文本字段指定的格式,并尝试根据指定的格式进行解析。如果不匹配则会抛出异常。

但在某些情况下,这种方式无效:

  • 如果我提供Date 02/01/20'Format - dd/MM/YYYY where it should throw an exception,因为我已经提供了year as 20 and the format is 'YYYY',但我不会例外。

请帮助我..提前致谢

1 个答案:

答案 0 :(得分:2)

首先,您可能需要查看How to Use the Focus Subsystem,注意可能有用的Validating Input

其次,正如@eatSleepCode所指出的那样,你实际上并没有解析字段的文本,而只是简单地格式化现有的Date,所以它永远不会抛出异常......

simple_format = new SimpleDateFormat(Date_format_text.getText());
// This is simply formatting the dates...
String ss = simple_format.format(dates);

相反,你需要使用更像......

的东西
String test = "02/01/20";
String format = "dd/MM/yyyy";
SimpleDateFormat sdf = new SimpleDateFormat(format);
sdf.setLenient(false);
try {
    Date date = sdf.parse(test);
    if (!sdf.format(date).equals(test)) {
        throw new ParseException(test + " is not a valid format for " + format, 0);
    }
} catch (ParseException ex) {
    ex.printStackTrace();
}

这样做,是测试格式化程序的解析器功能,还检查输入与结果解析后的Date格式化的内容,如果这些不匹配则抛出ParseException 。这是我能够获得严格解析器的关闭......

此外,YYYY曾代表一年中的一周,而非一年......