Convertit une chaîne de OffsetDateTime en Java
Je suis en train de convertir une chaîne en OffsetDateTime
mais l'obtention d'erreur ci-dessous.
java.time.format.DateTimeParseException: Text '20150101' could not be parsed: Unable to obtain OffsetDateTime from TemporalAccessor: {},ISO resolved to 2015-01-01 of type java.time.format.Parsed
Code : OffsetDateTime.parse("20150101", DateTimeFormatter.ofPattern("yyyyMMdd"));
Résultat attendu: OffsetDateTime object with date 20150101.
J'apprécie vraiment toute aide que vous pouvez fournir.
Merci,
Votre chaîne de caractères date est au format différent de celui du modèle. Vous ne devez utiliser "aaaammjj" format?
Désolé pour la faute de frappe, mis à jour à ma question. Je suis de passage "aaaammjj" seulement, mais l'obtention d'erreur mentionné.
Je pense que votre date et formateur devez également spécifier le décalage comme ce jour: 2007-12-03T10:15:30+01:00 . Voir la partie après le signe+.
Désolé pour la faute de frappe, mis à jour à ma question. Je suis de passage "aaaammjj" seulement, mais l'obtention d'erreur mentionné.
Je pense que votre date et formateur devez également spécifier le décalage comme ce jour: 2007-12-03T10:15:30+01:00 . Voir la partie après le signe+.
OriginalL'auteur Shashwat Shekhar Shukla | 2017-06-01
Vous devez vous connecter pour publier un commentaire.
OffsetDateTime
représente une date-heure avec un décalage , par exemple.Le texte que vous essayez d'analyser ne sont pas conformes aux exigences de
OffsetDateTime.
Voir https://docs.oracle.com/javase/8/docs/api/java/time/OffsetDateTime.html
La chaîne analysé ne contient ni le Écartfuseau ni de temps. À partir de la chaîne et le modèle du formateur, il semble que vous juste besoin d'un LocalDate. Ainsi, vous pouvez utiliser :
OriginalL'auteur Pallavi Sonal
Utiliser un LocalDate au lieu de offsetDatetime de votre dossier que vous souhaitez analyser uniquement le jour (pas le temps/offset). L'utilisation de offsetDatetime est très bien discuté ici
atStartOfDay().atOffset(yourDesiredOffset)
pour la convertir en uneOffsetDateTime
. Décalage peut être, par exemple,ZoneOffset.UTC
. C'est une bonne chose que la date et l'heure des classes souvent de vous forcer à être précis sur ce que vous voulez au lieu de vous donner des valeurs par défaut qui peuvent ne pas correspondre à vos besoins.OriginalL'auteur YuVi
Merci à tous pour votre réponse.
Plus tôt, j'ai été en utilisant joda datetime (voir méthode ci-dessous) pour gérer la date et datetime les deux, mais je voulais utiliser Java8 bibliothèques à la place des bibliothèques externes.
Je m'attendais même avec OffsetDateTime mais j'ai reçu de savoir qu'on peut utiliser ZonedDateTime ou OffsetDateTime si nous voulons travailler avec une date/heure dans une certaine zone de temps.
Comme je suis en train de travailler sur la Période et la Durée pour laquelle LocalDate peut vous aider.
Chaîne de type DateTime:
LocalDate à la chaîne souhaitée format:
ZoneId
pour queatStartOfDay
appel. Exemple:.atStartOfDay( ZoneId.of( " Africa/Lagos" ) )
Autrement vous sont implicitement l'obtention de la JVM actuelle du fuseau horaire par défaut. Mieux vaut être explicite au sujet de votre choix/l'heure prévue de la zone. Et, que par défaut peut être modifié à tout moment pendant runtime par du code dans la JVM, de sorte que le défaut n'est pas fiable. Par exemple, étant donné ce que vous avez dit dans votre Question, vous serait le début d'une Chicago journée plutôt que le début d'une Lagos jour.Une autre note,
LocalDate
est pourPeriod
que cette classe représente un laps de temps avec une granularité d'années, de mois, de jours. Mais unDuration
est une période de temps, comme un nombre total de secondes en plus d'une fraction de seconde, en nanosecondes. Ainsi, unDuration
s'applique à jour en temps des valeurs telles que laInstant
,OffsetDateTime
, etZonedDateTime
plutôt qu'une date uniquementLocalDate
.OriginalL'auteur Shashwat Shekhar Shukla