web-dev-qa-db-fra.com

Convertir une chaîne en OffsetDateTime en Java

J'essaie de convertir une chaîne en OffsetDateTime mais en dessous de l'erreur.

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"));

Sortie attendue: OffsetDateTime object with date 20150101.

J'apprécie vraiment toute aide que vous pouvez apporter.

Merci,

Merci à tous pour votre réponse. Auparavant, j'utilisais joda datetime (regardez la méthode ci-dessous) pour gérer la date et le datetime, mais je voulais utiliser les bibliothèques Java8 au lieu des bibliothèques externes.

static public DateTime convertStringInDateFormat(String date, String dateFormat){
    DateTimeFormatter formatter = DateTimeFormat.forPattern(dateFormat);
return formatter.parseDateTime(date);
}

Je m'attendais à la même chose avec OffsetDateTime mais j'ai appris que nous pouvons utiliser ZonedDateTime ou OffsetDateTime si nous voulons travailler avec une date/heure dans un certain fuseau horaire. Comme je travaille sur la période et la durée pour lesquelles LocalDate peut vous aider.

Chaîne à DateTime:

LocalDate date =
LocalDate.parse("20150101", DateTimeFormatter.ofPattern("yyyyMMdd"));

LocalDate au format de chaîne souhaité:

String dateFormat = "yyyy-MM-dd'T'HH:mm:ss'Z'";
date.atStartOfDay().format(DateTimeFormatter.ofPattern(dateFormat));

OffsetDateTime représente une date-heure avec un décalage, par exemple.

2007-12-03T10: 15: 30 + 01: 00

Le texte que vous essayez d'analyser n'est pas conforme aux exigences de OffsetDateTime. Voir https://docs.Oracle.com/javase/8/docs/api/Java/time/OffsetDateTime.html

La chaîne en cours d'analyse ne contient ni le ZoneOffset ni l'heure. D'après la chaîne et le modèle du formateur, il semble que vous ayez juste besoin d'un LocalDate. Vous pouvez donc utiliser:

LocalDate.parse("20150101", DateTimeFormatter.ofPattern("yyyyMMdd"));
7
Pallavi Sonal

Utilisez un LocalDate au lieu de offsetDatetime pour votre cas car vous souhaitez analyser uniquement la date (pas d'heure/décalage). L'utilisation de offsetDatetime est très bien discutée ici

2
YuVi