Comment analyser la chaîne de forme complète de mois en utilisant DateFormat en Java?
-
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
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.