我正在嘗試使用帶有 MySQL 的 OOP 和 DAO 模式與 Java 中的資料庫建立連接,并且需要驗證 Java 中的日期字串并將其插入 MySQl,連接很好,問題是驗證。我必須在兩者中都使用字串,因為這就是我被要求的,但它不能識別像 2 月這樣的月份或我嘗試了一段時間但有 30 天的月份,但顯然它可以用我使用的方法來完成(一元運算子的 TemporalAccesor 錯誤) . 我還必須根據該日期計算人的年齡,但由于是一個字串,我無法弄清楚如何將它與計算機的日期聯系起來。
感謝您的幫助,真的需要它
拋出例外但允許 2 月 31 日或 9 月 31 日的方法:我在填充所有其他資料的方法上呼叫它,并且除了那個細節之外運行良好還嘗試了一個正則運算式,但我看到不方便,也沒有捕捉到
private static void FechaNacV(){
String date;
Scanner sc = new Scanner(System.in);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu/MM/dd");
date = sc.nextLine();
try {
formatter.parse(date);
System.out.println("Valid date");
} catch (Exception e) {
System.out.println("Invalid Date, try yyyy/mm/dd format again");
FechaNacV();
}
}
uj5u.com熱心網友回復:
ResolverStyle.STRICT
中的默認決議器樣式DateTimeFormatter會將您無效的 2 月 31 日調整為適當的 28 日或 29 日。
如果您想避免這種容差調整,請指定不同的決議器樣式。
DateTimeFormatter
.ofPattern( "uuuu/MM/dd" )
.withResolverStyle( ResolverStyle.STRICT ) ; // Be strict: Reject 31st of February.
呼吁班級parse而LocalDate不是DateTimeFormatter班級。
LocalDate ld = null ;
String input = "2022/02/31" ;
DateTimeFormatter formatter =
DateTimeFormatter
.ofPattern( "uuuu/MM/dd" )
.withResolverStyle( ResolverStyle.STRICT ) ; // Be strict: Reject 31st of February.
try {
ld = LocalDate.parse( input , formatter ) ;
} catch ( DateTimeParseException e ) {
System.out.println( e ) ;
}
System.out.println( ld ) ;
請參閱在 Ideone.com 上運行的此代碼。
java.time.format.DateTimeParseException:無法決議文本“2022/02/31”:無效日期“FEBRUARY 31”
無效的
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/524900.html
