web-dev-qa-db-fra.com

Prise en charge de DateTimeFormatter pour le jour à un chiffre du mois et le mois de l'année

DateTimeFormmater ne semble pas gérer le jour à un chiffre du mois:

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

Dans cet exemple, SimpleDateFormat analyse correctement la date, mais DateTimeFormatter lève une exception. Si je devais utiliser des dates nulles, par exemple, "05/03/1969", les deux fonctionnent. Cependant, si le jour du mois ou le mois de l'année sont à un seul chiffre, DateTimeFormatter lève une exception.

Quel est le bon format DateTimeFormatter pour analyser le jour du mois et le mois de l'année à un et deux chiffres?

41
Mark Maxey

De la documentation :

Nombre : si le nombre de lettres est égal à un, la valeur est émise en utilisant le nombre minimum de chiffres et sans remplissage.

Le spécificateur de format souhaité est donc M/d/yyyy, en utilisant des lettres simples. Bien sûr, il analysera toujours la date Strings comme "12/30/1969" correctement comme pour ces valeurs jour/mois, deux chiffres sont le "nombre minimum de chiffres".

La différence importante est que MM et dd ne nécessitent aucun remplissage, pas que M et d ne peut pas gérer des valeurs supérieures à 9 (ce serait un peu ... inhabituel).

65
Holger