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).