Traté de verificar una entrada de String que es una fecha válida usando el formato dd/MM/yyyy así:
String input = Scanner.nextLine(); DateTimeFormatter formater = DateTimeFormatter.ofPattern("dd/MM/yyyy"); try{ LocaleDate.parse(input, formater); } catch(Exception e)Pero no puede verificar algunas reglas a continuación:
Leap year, February 29 days. Common year, February 28 days. Month 1, 3, 5, 7, 8, 10, 12, max 31 days. Month 4, 6, 9, 11, max 30 days. Cuando uso input = "30/02/2022" , es legal. Yo uso netbeans 8.2 y jdk 1.8 . ¿Admiten algunos métodos para verificar estas reglas?
Hay dos cosas que necesita cambiar en su formateador:
uuuu en lugar de yyyy . Es fácil intentar esto último, pero y significa "año dentro de ERA". No sabe si es BC o AD. u significa "año", incluida la información de ERA.SMART . Use .withResolverStyle(ResolverStyle.STRICT) para devolver una copia estricta del formateador.Debe habilitar el modo estricto de DateTimeFormatter:
DateTimeFormatter formater = DateTimeFormatter.ofPattern("dd/MM/yyyy") .withResolverStyle(ResolverStyle.STRICT); LocaleDate.parse("30/02/2022, formater); luego lanzará una excepción.