Java 指定格式的Jtextfield中的日期验证

Java 指定格式的Jtextfield中的日期验证,java,swing,validation,datetime,swingx,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());

我需要以指定的格式验证日期,其中两个输入仅在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");

    }
以上是。。我从文本字段中获取指定的日期和指定的格式,并尝试根据指定的格式进行解析。如果不匹配,它将抛出异常

但在某些情况下,这并不正常:

  • 如果我给出了日期为20年1月2日的
    和格式为-dd/MM/YYYY的
    ,它应该抛出一个
    异常,因为我已经给出了
    年份为20,格式为“YYYY”
    ,但我没有给出异常

请帮帮我。。提前感谢

首先,您可能想看一看,注意哪些可能有用

其次,正如@eatSleepCode所指出的,您实际上并不是在解析字段的文本,而是在格式化现有的
日期
,因此它永远不会抛出异常

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();
}
这样做的目的是测试格式化程序的解析器功能,但也会根据生成的解析
日期
的格式检查输入,如果这些不匹配,则抛出一个
解析异常
。这是我能够找到一个严格的解析器的最后一步


另外,
YYYY
用于表示一年中的一周,而不是一年……

查看此链接,它将为您省去很多麻烦
dates=new Date()
是一个日期对象,您可以在
simple_format.format(日期)中使用它因此它不会给出任何异常,并且工作正常。很抱歉,这是正确的代码。。之前的一个是检查格式
DateFormat df=newsimpledateformat(Date\u format\u text.getText());df.setLenient(假);dated1=df.parse(Lower_Date_text.getText())//在上面。。我正在尝试解析到目前为止的文本,因此它不是以指定的格式,它将是gv异常,但它确实有一个用途,正如我在ques
validator_LD.setVisible(false);}中提到的那样catch(ParseException p){System.out.println(“错误”);}