util nueva improvements fechas ejemplo conociendo java date java-8 java-time

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