Beim Versuch, eine ISO 8601-formatierte Zeichenfolge zu analysieren ("2018- 02-13T10:20:12.120 0000") unter Verwendung der ZonedDateTime-Klasse von Java 8 und eines vordefinierten Formatmusters kann es bei Benutzern aufgrund eines fehlenden Doppelpunkts im Offset zu einem Analysefehler kommen.
Dieses Parsing-Problem ist auf einen Fehler in Java 8 zurückzuführen, der verhindert, dass die OffsetDateTime-Klasse Offsets ohne Doppelpunkt zwischen den Stunden und Minuten korrekt analysiert. Dieser Fehler betrifft Offsets wie „0000“, aber nicht „00:00“.
Ändern Sie die Eingabezeichenfolge, um vor dem Parsen den fehlenden Doppelpunkt hinzuzufügen:
<code class="java">String input = "2018-02-13T10:20:12.120+0000".replace("+0000", "+00:00"); OffsetDateTime odt = OffsetDateTime.parse(input);</code>
Definieren Sie einen DateTimeFormatter mit einem bestimmten Muster, um das Parsen zu steuern:
<code class="java">String input = "2018-02-13T10:20:12.120+0000"; DateTimeFormatter f = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss.SSSX"); OffsetDateTime odt = OffsetDateTime.parse(input, f);</code>
Weitere Informationen Anpassbares Formatierungsmuster, verwenden Sie einen DateTimeFormatterBuilder:
<code class="java">DateTimeFormatter f = DateTimeFormatterBuilder.ofPattern("uuuu-MM-dd'T'HH:mm:ss.SSSX") .appendOffset("+HH:MM", "Z") .toFormatter(); OffsetDateTime odt = OffsetDateTime.parse(input, f);</code>
Um das Parsen zu vereinfachen, stellen Sie sicher, dass Offsets immer einen Doppelpunkt enthalten, sowohl Stunden als auch Stunden Minuten (auch wenn Null) und füllen Sie Nullen auf (-05:00 statt -5).
<code class="java">Instant instant = odt.toInstant();</code>
<code class="java">ZoneId z = ZoneId.of("America/Montreal"); ZonedDateTime zdt = odt.atZoneSameInstant(z);</code>
Das obige ist der detaillierte Inhalt vonWarum hat die OffsetDateTime-Klasse von Java 8 Schwierigkeiten, ISO 8601-Zeichenfolgen mit Offsets wie „0000“ zu analysieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!