LocalDateTime dateAndTime = LocalDateTime.now(); //gets current date and time
String birthdateIn = cBirthdate.getText(); //gets birthdate input
SimpleDateFormat mmddyyyy = new SimpleDateFormat("mm/dd/yyyy"); //mm/dd/yyyy formatter
mmddyyyy.setLenient(false);
try {
Date stringToDate = mmddyyyy.parse(birthdateIn);
bLabel.setForeground(Color.green);
bLabel.setText("Valid Birthdate");
}
catch (ParseException e) {
bLabel.setForeground(Color.red);
bLabel.setText("Invalid Birthdate");
}
这是我用来检查jframe中生日有效性的代码,虽然检查器工作正常,但当我输入一个整数时,它会验证年份,而不是检查它是否包含4个整数。我该怎么纠正呢?
另外,如何提取输入的出生日期来检查用户是否在18岁以下?
3条答案
按热度按时间sh7euo9m1#
我建议使用新的日期/时间api(
java.time
)而不是遗留类。因此,您可以使用DateTimeFormatter
有必要的模式来分析birthdateIn
到LocalDate
对象。之后您可以使用LocalDate#isAfter
结合LocalDate.now().minusYears(18)
.下面是一个工作示例:
cl25kdpy2#
java.time文件
您已经在使用
LocalDateTime
fomrjava.time,现代java日期和时间api。我当然建议您坚持使用java.time并避免使用旧的SimpleDateFormat
班级。它是一个出了名的麻烦类,尤其是验证无望(将lenence设置为false有一点帮助,但只解决了众多问题中的一个)。您可能希望通过两种方式验证出生日期:
字符串应为有效日期。
日期应在合理范围内。对于一个活人的出生日期,比如说不能超过140年前,也不能是将来。
你需要的大部分代码已经在matt的正确答案中了,所以我不再重复了。
jei2mxaa3#
您可以使用我为您修改的这个形状非常好的正则表达式来验证您得到的日期的形状是否正确