Comment analyser la chaîne de forme complète de mois en utilisant DateFormat en Java?

StackOverflow https://stackoverflow.com/questions/2219139

  •  19-09-2019
  •  | 
  •  

Question

J'ai essayé ceci:

DateFormat fmt = new SimpleDateFormat("MMMM dd, yyyy");
Date d = fmt.parse("June 27, 2007");

Erreur:

Exception in thread "main" java.text.ParseException: Unparseable date: "June 27, 2007"

Les docs java disent que je devrais utiliser quatre caractères pour correspondre à la forme complète. Je ne suis en mesure d'utiliser MMM avec succès avec des mois comme abrégés "Jun" mais je dois correspondre à la forme complète.

  

Texte: Pour la mise en forme, si le nombre   des lettres de motif est de 4 ou plus, le   forme complète est utilisée; sinon un court   ou sous forme abrégée est utilisée si   disponible. Pour l'analyse, les deux formes sont   accepté, indépendamment du nombre de   lettres de motif.

http: //java.sun .com / J2SE / 1.6.0 / docs / api / java / text / SimpleDateFormat.html

Était-ce utile?

La solution

Vous utilisez probablement un lieu où les noms de mois ne sont pas « Janvier », « Février », etc., mais d'autres mots dans votre langue locale.

Essayez spécifier les paramètres régionaux que vous souhaitez utiliser, par exemple Locale.US:

DateFormat fmt = new SimpleDateFormat("MMMM dd, yyyy", Locale.US);
Date d = fmt.parse("June 27,  2007");

En outre, vous disposez d'un espace supplémentaire dans la chaîne de date, mais en fait cela n'a aucun effet sur le résultat. Il fonctionne de toute façon.

Autres conseils

Juste en haut ce jusqu'à la nouvelle API Java 8:

DateTimeFormatter formatter = new DateTimeFormatterBuilder().appendPattern("MMMM dd, yyyy").toFormatter();
TemporalAccessor ta = formatter.parse("June 27, 2007");
Instant instant = LocalDate.from(ta).atStartOfDay().atZone(ZoneId.systemDefault()).toInstant();
Date d = Date.from(instant);
assertThat(d.getYear(), is(107));
assertThat(d.getMonth(), is(5));

Un peu plus bavard, mais vous voyez aussi que les méthodes de date utilisés sont déconseillés ;-) Il est temps de passer à autre chose.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top