Lors de la tentative d'analyse d'une chaîne au format ISO 8601 ("2018- 02-13T10:20:12.120 0000") en utilisant la classe ZonedDateTime de Java 8 et un modèle de format prédéfini, les utilisateurs peuvent rencontrer une erreur d'analyse en raison d'un deux-points manquant dans le décalage.
Ce problème d'analyse provient d'un bug dans Java 8 qui empêche la classe OffsetDateTime d'analyser correctement les décalages sans deux-points entre les heures et les minutes. Ce bug affecte les décalages tels que " 0000" mais pas " 00:00". ) Hack de manipulation de chaîne :
Modifiez la chaîne d'entrée pour ajouter les deux points manquants avant l'analyse :
<code class="java">String input = "2018-02-13T10:20:12.120+0000".replace("+0000", "+00:00"); OffsetDateTime odt = OffsetDateTime.parse(input);</code>
<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>
<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>
<code class="java">Instant instant = odt.toInstant();</code>
<code class="java">ZoneId z = ZoneId.of("America/Montreal"); ZonedDateTime zdt = odt.atZoneSameInstant(z);</code>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!