簡體   English   中英

如何在 Java 中檢查 MM/dd/yyyy 中的日期有效性?

[英]How do I check date validity in MM/dd/yyyy in Java?

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 中的生日有效性的代碼,雖然檢查器工作正常,但當我輸入單個 integer 而不是檢查它是否包含 4 個整數時,它會驗證年份。 我該如何糾正?

另外如何提取輸入的生日以檢查用戶是否低於 18 歲?

我建議使用新的日期/時間 API ( java.time ) 而不是舊類。 因此,您可以使用具有必要模式的DateTimeFormatterbirthdateIn解析為LocalDate object。 之后,您可以通過結合使用LocalDate#isAfterLocalDate.now().minusYears(18)來檢查用戶是否低於 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");
}

java.time

您已經在使用來自java.timeLocalDateTime ,現代 Java 日期和時間 API。 我當然建議您堅持使用 java.time 並避免使用舊的SimpleDateFormat class。 這是一個臭名昭著的麻煩 class ,尤其是對驗證毫無希望(設置 leniency false 有一點幫助,但只能解決許多問題中的一個)。

您可能希望通過兩種方式驗證出生日期:

  1. 該字符串應該是一個有效的日期。
  2. 日期應在合理范圍內。 例如,對於一個活着的人的出生日期,說它不能超過 140 年前,也不能在未來。

您需要的大部分代碼已經在 Matt 的好答案中,所以我不再重復。

您可以使用我為您修改的這個形狀很好的正則表達式來驗證您獲得的日期是否正確

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}$")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM