Schwierigkeit beim Parsen von ISO 8601-Zeichenfolgen in Java 8: Fehlender Doppelpunkt im Offset
Javas Funktionalität zum Parsen von Datum und Uhrzeit kann frustrierend sein, insbesondere beim Umgang mit mit ISO 8601-formatierten Zeichenfolgen, denen ein Doppelpunkt im Offset fehlt. Lassen Sie uns dieses Problem untersuchen und mithilfe der neuen java.time-API Lösungen bereitstellen.
Problembeschreibung:
Beim Versuch, eine Datumszeichenfolge wie „2018-02-13T10 :20:12.120 0000" unter Verwendung der alten Klasse java.util.Date gelingt der Prozess reibungslos.
Date date = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss.SSSZZZ") .parse("2018-02-13T10:20:12.120+0000");
Das gleiche Format schlägt jedoch fehl, wenn die neuere Klasse ZonedDateTime von java.time verwendet wird.
ZonedDateTime dateTime = ZonedDateTime.parse("2018-02-13T10:20:12.120+0000", DateTimeFormatter.ofPattern("yyyy-MM-dd'T'hh:mm:ss.SSSZZZ"));
Lösung:
Das Problem liegt darin, dass zum Parsen die falsche Klasse verwendet wird. Anstelle von ZonedDateTime, das eine vollständige Zeitzone darstellt, sollten Sie OffsetDateTime für Fälle verwenden, in denen es nur um einen Offset von UTC geht.
OffsetDateTime odt = OffsetDateTime.parse( "2018-02-13T10:20:12.120+0000" , DateTimeFormatter.ofPattern( "uuuu-MM-dd'T'HH:mm:ss.SSSX" ) );
Vorübergehende Fehlerumgehung:
Leider Aufgrund eines Fehlers in Java 8 kann es beim Parsen von Offset-Zeichenfolgen, bei denen der Doppelpunkt zwischen Stunden und Minuten weggelassen wird, zu Problemen kommen. Als Workaround können Sie einen der folgenden Schritte ausführen:
Hack: Ersetzen Sie den fehlenden Doppelpunkt in der Eingabezeichenfolge.
String input = "2018-02-13T10:20:12.120+0000".replace( "+0000" , "+00:00" );
Formatierungsmuster definieren:Verwenden Sie beim Erstellen des DateTimeFormatter ein explizites Formatierungsmuster.
String input = "2018-02-13T10:20:12.120+0000" ; DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuu-MM-dd'T'HH:mm:ss.SSSX" );
Zusätzliche Überlegungen:
Wenn Sie einen Wert in UTC benötigen, extrahieren Sie ein Instant-Objekt. Für eine lokalisierte Zeit wenden Sie eine Zeitzone mithilfe der ZonedDateTime-Klasse an.
Fazit:
Durch das Verständnis der entsprechenden Klassen und den Umgang mit Fehlern können Sie Datumsangaben effektiv analysieren und manipulieren im ISO 8601-Format mit der java.time-API. Denken Sie daran, nach Möglichkeit die neueren Klassen zu verwenden, um Probleme mit der alten Datumsformatierung zu vermeiden.
Das obige ist der detaillierte Inhalt vonWarum ist es schwierig, ISO 8601-Zeichenfolgen in Java 8 zu analysieren, wenn im Offset kein Doppelpunkt vorhanden ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!