Erreur java.temps.format.DateTimeParseException: n'a pas pu être analysé, unparsed texte trouvé à l'indice 10
Im essayant de pase la Chaîne suivante à l'aide de LocalDateTime, mais je reçois toujours de unparsed texte trouvé d'erreur:
Error java.time.format.DateTimeParseException: Text '2016-08-18 14:27:15.103+02' could not be parsed, unparsed text found at index 10
Voici ma Chaîne: convertDate: '2016-08-18 14:27:15.103+02'
Et mon code:
public static LocalDate conversorStringToLocalDateTime(String convertDate) throws ParseException {
LocalDate dateTime =LocalDate.parse(convertDate);
return dateTime;
}
Je suppose que c'est pas trop compliqué, acheter Im pas en mesure de voir l'erreur. Pourrait le +02 dans la Chaîne en être la cause?
Je pense que c'est l'espace entre la date et l'heure. C'est qu'un espace de char ou d'un espace insécable? Si votre chaîne vient d'une forme quelconque, qui peut être un autre char que l'espace
Il s'agit d'une Base de données Postgre
Il s'agit d'une Base de données Postgre
OriginalL'auteur Asier Pomposo | 2016-08-19
Vous devez vous connecter pour publier un commentaire.
tl;dr
Détails
La Réponse par greg-449 est correct sur le problème (en utilisant une date seulement de l'objet pour une date de valeur), mais pas la solution.
Que la Réponse utilise
LocalDateTime
qui inutilement jette des informations précieuses sur la offset-de-UTC. UnLocalDateTime
ne pas représentent un moment précis sur la chronologie, seulement une vague idée possible des moments de en fonction de réglage dans un fuseau horaire particulier.La
+02
est un offset-de-UTC sens “deux heures avant l'heure de UTC”. Donc, en UTC, le temps de la journée pour ce moment simultané est de 12 heures, 2 heures de moins que votre 14 heures. Cette ne représentent un moment précis sur la chronologie. Ce décalage est de la qualité des informations que vous jetez unLocalDateTime
plutôt qu'unOffsetDateTime
.Le format de votre chaîne est au format SQL, qui est proche de la norme ISO 8601. Suffit de remplacer l'ESPACE dans le milieu avec une
T
. La java.les classes de temps utiliser le format ISO 8601 formats par défaut, donc pas besoin de spécifier le format.Malheureusement, Java 8 a un bug dans l'analyse des valeurs de décalage en abrégé, à seulement une heure ou les valeurs de décalage de l'omission de la virgule entre les heures et les minutes. Fixe en Java 9. Mais dans Java 8, nous avons besoin d'ajuster l'entrée.
Maintenant analyser.
De vidage de la console. Notez comment nous avons transformé
+02
en+02:00
.Vous pouvez également spécifier le format. Le décalage d'analyse de bug ne mord pas lors de l'utilisation de ce format.
Base de données
Venant de Postgres, vous devriez être en récupération de la valeur comme un objet date-heure plutôt qu'une Chaîne de caractères.
Si votre pilote JDBC est conforme avec JDBC 4.2 vous pouvez appeler
ResultSet::getObject
pour obtenir unInstant
ouOffsetDateTime
. Si pas, appelezResultSet::getTimestamp
pour obtenir unjava.sql.Timestamp
, puis convertir immédiatement à java.de temps en appelanttoInstant
sur l'Horodatage de l'objet.Bâton avec java.de temps pour votre entreprise de logique; utiliser le java.les types sql brièvement et uniquement pour l'échange avec la base de données.
OriginalL'auteur Basil Bourque
Votre code à l'aide de
LocalDate
qui seule traite un jour - pas date et le temps de sorte que vous obtenez une erreur lors de l'analyse trouve l'espace après la date.De sorte que vous devriez être en utilisant
LocalDateTime
maisLocalDateTime.parse(String)
s'attend à une ISO de format de date qui n'est pas le format que vous utilisez.Si vous avez besoin d'utiliser un
DateTimeFormatter
pour spécifier le format de votre chaîne d'entrée. Quelque chose comme:OriginalL'auteur greg-449