Heim > Java > javaLernprogramm > Warum ist es schwierig, ISO 8601-Zeichenfolgen in Java 8 zu analysieren, wenn im Offset kein Doppelpunkt vorhanden ist?

Warum ist es schwierig, ISO 8601-Zeichenfolgen in Java 8 zu analysieren, wenn im Offset kein Doppelpunkt vorhanden ist?

Susan Sarandon
Freigeben: 2024-10-31 02:37:29
Original
372 Leute haben es durchsucht

Why Is It Difficult to Parse ISO 8601 Strings in Java 8 When the Offset Lacks a Colon?

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");
Nach dem Login kopieren

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"));
Nach dem Login kopieren

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" )
);
Nach dem Login kopieren

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:

  1. Hack: Ersetzen Sie den fehlenden Doppelpunkt in der Eingabezeichenfolge.

    String input = "2018-02-13T10:20:12.120+0000".replace( "+0000" , "+00:00" );
    Nach dem Login kopieren
  2. 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" );
    Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage