SimpleDateFormat “Unparseable date” Exception
Je suis en train d'analyser datetime chaîne avec SimpleDateFormat.parse()
mais je continue à recevoir des Unparseable date exceptions.
Ici est le format de la date, je suis en train d'analyser: 2011-10-06T12:00:00-08:00
Ici c'est le code que j'utilise:
try {
String dateStr = "2011-10-06T12:00:00-08:00";
SimpleDateFormat dateParser = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
SimpleDateFormat dateFormatter = new SimpleDateFormat("MMM d, yyyy");
Date date = dateParser.parse(dateStr);
System.out.println(dateFormatter.format(date));
} catch(Exception e) {
System.out.println(e.getMessage());
}
Qui renvoie cette erreur: java.text.ParseException: Unparseable date: "2011-10-06T12:00:00-08:00"
Pour autant que je sais que c'est la façon correcte d'utiliser la classe SimpleDateFormat mais je ne suis pas fluent en Java, j'ai donc pu se tromper. Tout savoir ce que ma question est?
Vous devez vous connecter pour publier un commentaire.
Le fuseau horaire doit être GMT-08:00 ou -0800 (comme Madcore Tom a dit). Voir Java docs.
Dans Java 7, vous pouvez utiliser "aaaa-MM-jj PAS'HH:mm:ssX"
X
option est ce que je cherchais. J'ai lu la version 6 de Java docs. MerciJe crois que SimpleDateFormat va pas analyser les fuseaux horaires avec un deux-points (par -08:00). Il devrait être en mesure d'analyser la date
2011-10-06T12:00:00-0800
.Une simple manipulation de la chaîne devrait vous aider à vous débarrasser du côlon.
Vous devez d'abord formater la valeur dans
"2011-10-06T12: 00: 00-08: 00"
.Après, créer la mise en forme pour formataction désiré.
Ex:
SimpleDateFormat fmt = new SimpleDateFormat ("dd /MM /yyyy HH: mm: ss");
et après faire analyser pour la date.
Ex:
Date date = dateParser.parse (dateFormat);
et l'impression de la date formatée.
Ci-dessous, un exemple complet.
tl;dr
java.temps
La méthode moderne utilise la java.temps classes qui permettent d'éviter la pénible ancien héritage de date-heure classes.
Vous de la chaîne d'entrée est dans un format conforme à la ISO 8106 standard. La java.les classes de temps l'utilisation de ces formats standard par défaut lors de l'analyse/génération de chaînes. Donc pas besoin de spécifier le format.
Analyser comme une
OffsetDateTime
parce que vos chaînes d'entrée comprend un décalage de l'UTC, mais pas un fuseau horaire.Générer une chaîne de caractères dans le format désiré. Laissez java.le temps de localiser automatiquement plutôt que de dur-formatage du code des motifs.
Quand seralizing une date-valeur de temps que le texte, l'utilisation de la norme ISO 8601 formats plutôt que d'une version localisée de format.
Sur java.temps
La java.temps cadre est intégré dans Java 8 et les versions ultérieures. Ces classes permettent d'éviter la pénible vieux héritage date du temps des classes comme
java.util.Date
,Agenda
, &SimpleDateFormat
.La Joda-Time projet, maintenant dans le mode de maintenance, conseille la migration vers le java.le temps classes.
Pour en savoir plus, consultez les Oracle Tutoriel. Et de recherche de Débordement de Pile pour de nombreux exemples et des explications. La spécification est JSR 310.
Où obtenir le java.les classes de temps?
La ThreeTen-Extra projet s'étend java.temps avec d'autres classes. Ce projet est un terrain d'essai pour de possibles futurs ajouts à java.temps. Vous pouvez trouver quelques classes utiles ici comme
Intervalle
,YearWeek
,YearQuarter
, et plus.Essayer avec
Pour un format de date comme
2013-06-28T00:00:00+00:00
, ce code devrait fonctionner:Je suis sûr que la plupart d'entre vous frustré par le fait que SimpleDateFormat ne peut pas gérer format ISO8601. Voici ma petite astuce pour résoudre ce désagrément.
Créer une liste de Connaître le format que vous savez que vous allez utiliser pour votre application et d'appliquer SimpleDateFormat à la liste. Maintenant, dans votre formatDate() la méthode, simples, faites tous vos format connu et intercepter l'Exception, alors si n'ont toujours pas d'une date, il suffit d'utiliser
pour l'essayer et voir si cela fonctionne. Pour plus d'info Truc Simple pour convertir le format de Date avec le fuseau horaire en Java!
Je recommanderais fortement à l'aide de JodaTime pour ce genre de chose.
Vous êtes en essayant d'analyser un format de Date ISO, et Joda ne que "out of the box', et vous donnera beaucoup d'autres avantages.
J'ai depuis longtemps renoncé à essayer d'obtenir la norme JDK classes de données pour faire des choses utiles.