0
votes

ParseException: date imparable dans une méthode personnalisée pour les dates d'analyse

J'ai écrit une méthode pour analyser une date. Quand je passe la date suivante comme argument 2019-03-05 06:15:00 , je reçois un java.text.parsexception: date imparable: "2019-03 -05 06:15:00 ".

Qu'est-ce qui pourrait être faux avec la logique? xxx


3 commentaires

Je vous recommande d'utiliser SimpleDateFormat . Cette classe est notoirement gênante et longtemps obsolète. Au lieu de cela, utilisez offsetDateTime et DateTimeformatter , à partir de Java.time, l'API et l'heure de l'heure de Java modernes .


N'utilisez pas non plus 'z' dans votre chaîne de modèle de format pour analyser ou imprimer z comme littéral. z (prononcé zulu ) signifie UTC et doit être analysé ou imprimé en tant que tel, ou vous aurez des résultats erronés.


Qu'est-ce que tu es vraiment essayer d'obtenir? Il semble que vous produisiez de manière dynamique une expression SQL ou similaire. Pour la grande majorité des fins qui seraient plus compliquées que ce dont vous avez vraiment besoin. Voir XY Problème .


4 Réponses :


1
votes

Vous essayez d'analyser string 2019-03-05 06:15:00 Utilisation du modèle AAAA-MM-DD'T'HH: mm'z ' que évidemment ne correspond pas.


4 commentaires

J'ai essayé de passer la chaîne suivante: 2013-06-19t12: 00-05: 00 et d'obtenir toujours un java.text.parsexception: date imparable: "2013-06-19T12 : 00-05: 00 "


@samba toujours la chaîne que vous essayez d'analyser ne correspond pas au modèle, vérifiez la partie temporelle


Essayez 2013-06-19T12: 00Z , c'est ce qui devrait probablement fonctionner.


Définir "travail". Cela ne jettera pas une exception, mais donnera un résultat incorrect (sur la plupart des JVM).



1
votes

Modifiez la méthode pour suivre

2019-03-05T06:15Z


4 commentaires

J'ai besoin de quitter la méthode comme. Au lieu de cela, je veux comprendre quel genre de chaîne devrais-je passer


Pass 2019-03-05T06: 15Z


Merci! Le problème était que j'ai passé la chaîne de date incompatible avec mon modèle


@samba tort! Le z est le décalage de la zone! Pas seulement une lettre. Votre motif ne reflète pas ce que vous voulez faire.



1
votes

Le z code> représente le décalage de la zone. Par documentation xxx pré>

de sorte que votre devrait être, par exemple p> xxx pré>

tes modèles ne " Il semble refléter strong> ce que vous voulez accomplir. Z n'est pas juste une lettre simple. P> xxx pré>

de toute façon, évitez d'utiliser SimpleDateformat code>, utilisez DateTimeformatter code>. partie de l'API de la nouvelle fois pour Java 8. P>

final TemporalAccessor parsed = DateTimeFormatter.ISO_DATE_TIME.parse(val);


1 commentaires

@ MS90 ne le savait pas. Merci. Eh bien, espérons que OP vient d'Allemagne alors;)



1
votes

Eh bien, rien ne va mal avec votre code, à l'exception de ce SS et changez aussi la commande.

S Deuxième numéro de la minute 55

S Fraction de deuxième fraction 978 xxx


3 commentaires

Je présume que T est pour la balise (jour) et z est pour Zeit (heure)?


Non, @ ms90. T est pour le temps (désignote où commence l'heure de la journée) et Z est le nom de l'armée du «fuseau horaire zoulou» ou de l'UTC ou de l'UTC offset zéro.


La réponse est ici: ISO 8601 sur Wikipedia ( z ici et T ici ). Mais s'il vous plaît attendez que Samba confirme bien sûr.