如何在java中检查mm/dd/yyyy中的日期有效性?

m2xkgtsf  于 2021-07-06  发布在  Java
关注(0)|答案(3)|浏览(276)
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岁以下?

sh7euo9m

sh7euo9m1#

我建议使用新的日期/时间api( java.time )而不是遗留类。因此,您可以使用 DateTimeFormatter 有必要的模式来分析 birthdateInLocalDate 对象。之后您可以使用 LocalDate#isAfter 结合 LocalDate.now().minusYears(18) .
下面是一个工作示例:

String birthdateIn = "01/09/2003"; // change to check boundaries

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy");

try {
    LocalDate birthdate = LocalDate.parse(birthdateIn, formatter);
    System.out.println("Valid Birthdate");

    if (birthdate.isAfter(LocalDate.now().minusYears(18))) {
        System.out.println("not 18 years yet");
    } else {
        System.out.println("18 years or older");
    }

} catch (DateTimeParseException e) {
    System.out.println("Invalid Birthdate");
}
cl25kdpy

cl25kdpy2#

java.time文件

您已经在使用 LocalDateTime fomrjava.time,现代java日期和时间api。我当然建议您坚持使用java.time并避免使用旧的 SimpleDateFormat 班级。它是一个出了名的麻烦类,尤其是验证无望(将lenence设置为false有一点帮助,但只解决了众多问题中的一个)。
您可能希望通过两种方式验证出生日期:
字符串应为有效日期。
日期应在合理范围内。对于一个活人的出生日期,比如说不能超过140年前,也不能是将来。
你需要的大部分代码已经在matt的正确答案中了,所以我不再重复了。

jei2mxaa

jei2mxaa3#

您可以使用我为您修改的这个形状非常好的正则表达式来验证您得到的日期的形状是否正确

birthdateIn.matches("^(((0[13578]|(10|12))/(0[1-9]|[1-2][0-9]|3[0-1]))|(02-(0[1-9]|[1-2][0-9]))|((0[469]|11)-(0[1-9]|[1-2][0-9]|30)))/[0-9]{4}$")

相关问题