java - nueva - Soporte de DateTimeFormatter para el día de un solo dígito del mes y el mes del año
java util date (1)
DateTimeFormmater no parece manejar un solo día del mes:
String format = "MM/dd/yyyy";
String date = "5/3/1969";
System.out.println(new SimpleDateFormat(format).parse(date));
System.out.println(LocalDate.parse(date, DateTimeFormatter.ofPattern(format)));
En este ejemplo, SimpleDateFormat analiza correctamente la fecha, pero DateTimeFormatter lanza una excepción. Si tuviera que usar fechas rellenadas con cero, por ejemplo, "05/03/1969", ambos funcionan. Sin embargo, si el día del mes o el mes del año son de un solo dígito, DateTimeFormatter lanza una excepción.
¿Cuál es el formato DateTimeFormatter correcto para analizar el día del mes y el mes del año de uno y dos dígitos?
De la documentación :
Número : si el recuento de letras es uno, el valor se genera utilizando el número mínimo de dígitos y sin relleno.
Por lo tanto, el especificador de formato que desea es M/d/yyyy , utilizando formularios de una sola letra. Por supuesto, aún se analizarán las String fecha como "12/30/1969" correctamente como para estos valores de día / mes, dos dígitos son el "número mínimo de dígitos".
La diferencia importante es que MM y dd requieren un relleno cero, no que M d no puedan manejar valores superiores a 9 (eso sería un poco ... inusual).