我需要以指定的格式验证日期,其中两个输入仅在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'
,但我不会例外。请帮助我..提前致谢
答案 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
曾代表一年中的一周,而非一年......