[英]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
) 而不是舊類。 因此,您可以使用具有必要模式的DateTimeFormatter
將birthdateIn
解析為LocalDate
object。 之后,您可以通過結合使用LocalDate#isAfter
和LocalDate.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的LocalDateTime
,現代 Java 日期和時間 API。 我當然建議您堅持使用 java.time 並避免使用舊的SimpleDateFormat
class。 這是一個臭名昭著的麻煩 class ,尤其是對驗證毫無希望(設置 leniency false 有一點幫助,但只能解決許多問題中的一個)。
您可能希望通過兩種方式驗證出生日期:
您需要的大部分代碼已經在 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.