Impossible d'analyser la chaîne DateTime avec le marqueur AM/PM
-
26-09-2019 - |
Question
La chaîne que je souhaite formater ressemble à ceci :Chaîne datetime = "9/1/10 11:34:35 AM"
Le modèle suivant pour les travaux de SimpleDateFormat :
SimpleDateFormat sdf = SimpleDateFormat("M/d/yy h:mm:ss");
Date d = sdf.parse(datetime);
System.out.println(d);
Output> [Wed Sep 01 11:34:35 CEST 2010]
Cependant, je dois également analyser le marqueur AM/PM, et lorsque je l'ajoute au modèle, je reçois une exception.
Modèle qui ne fonctionne pas :
SimpleDateFormat sdf = SimpleDateFormat("M/d/yy h:mm:ss a");
J'ai également essayé avec ceci, avec la même exception :
SimpleDateFormat sdf = SimpleDateFormat("M/d/yy h:mm:ss aa");
Exception:
java.text.ParseException: Unparseable date: "9/1/10 11:34:35 AM"
J'ai regardé l'API sur http://download.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html#text mais je n'arrive pas à trouver où je fais du mal.
Aucune suggestion?
La solution
Il est possible que votre Locale
par défaut a des symboles pour AM / PM. Lors de la construction d'un format de date, vous devez toujours fournir un Locale
à moins que vous voulez vraiment utiliser le Locale
par défaut du système, par exemple:.
SimpleDateFormat sdf = new SimpleDateFormat("M/d/yy h:mm:ss a", Locale.US)
Autres conseils
Je prends un exemple de la date indiquée ci-dessous et imprimer la date formatée dans le format 24 heures si convient à vos besoins.
String inputdate="9/1/10 11:34:35 AM";
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("dd/MM/yy hh:mm:ss aa",Locale.getDefault());
try {
System.out.println(""+new SimpleDateFormat("dd/MM/yy HH:mm:ss",Locale.getDefault()).format(simpleDateFormat.parse(inputdate)));
} catch (ParseException e) {
e.printStackTrace();
}
Si vous avez encore une requête, S'il vous plaît répondre. Merci.
réponse moderne:
String datetime = "9/1/10 11:34:35 AM";
LocalDateTime dt = LocalDateTime.parse(datetime,
DateTimeFormatter.ofPattern("M/d/yy h:mm:ss a", Locale.ENGLISH));
Ceci produit un LocalDateTime
de 2010-09-01T11: 34: 35. Méfiez-vous des années à deux chiffres, cependant; DateTimeFormatter
supposera 2000 à 2099. Pour mon anniversaire, cela aurait été incorrect.
Nous avons encore besoin de fournir les paramètres régionaux. Étant donné que les marqueurs AM / PM ne sont guère utilisés dans la pratique dans d'autres lieux que l'anglais, je considérais Locale.ENGLISH
un pari assez sûr. S'il vous plaît remplacer votre propre.
Les autres réponses sont des réponses fines en 2010 et 2011. Déjà en 2014 ce qui précède était valide et j'aurais préféré.
Si vous travaillez avec FreeMarker pour Java et que vous abordez ce problème, utilisez le code ci-dessous.J'ai eu ce problème, mes paramètres régionaux ont défini AM/PM sur DE.Pas certain de pourquoi...<#setting locale="en_US">