Mit der ersten Veröffentlichung von Java 8 ist das Parsen des Bruchteils einer Sekunde mit java.time nicht möglich Das Paket kann auf eine Ausnahme stoßen. Betrachten Sie diesen Code:
<code class="java">String input = "2011120312345655"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmssSS"); LocalDateTime localDateTime = LocalDateTime.parse(input, formatter);</code>
Dieser Code schlägt mit einer Ausnahme fehl:
java.time.format.DateTimeParseException
In der Dokumentation heißt es, dass der strikte Modus die gleiche Anzahl an Formatzeichen wie Eingabeziffern erfordert. Allerdings enthält der Code „SS“ für Sekundenbruchteile, was im Widerspruch zur Anzahl der Ziffern in der Eingabe steht.
Um dieses Problem zu beheben, wurde eine Problemumgehung vorgeschlagen:
<code class="java">DateTimeFormatter dtf = new DateTimeFormatterBuilder() .appendPattern("yyyyMMddHHmmss") .appendValue(ChronoField.MILLI_OF_SECOND, 3) .toFormatter();</code>
Diese Problemumgehung deckt jedoch den Anwendungsfall von nur zwei „S“-Mustersymbolen nicht vollständig ab. Andere Felder wie MICRO_OF_SECOND (sechs SSSSSS) oder NANO_OF_SECOND (neun SSSSSSSS) müssen verwendet werden.
Laut Dokumentation:
"Fraction: Gibt das Nanosekundenfeld als Bruch aus. (...) Beim Parsen im strikten Modus muss die Anzahl der analysierten Ziffern mit der Anzahl der Musterbuchstaben übereinstimmen .
Lösung in Java 9
In Java 9 erhielt der JSR-310-Parser jedoch die Möglichkeit, Bruchteile bei der Analyse benachbarter Werte zu analysieren. Diese Verbesserung geht auf die Herausforderungen früherer Versionen ein und bietet mehr Flexibilität beim Arbeiten mit Sekundenbruchteilen.
Das obige ist der detaillierte Inhalt vonWarum kann das Paket „java.time“ von Java 8 Sekundenbruchteile im strikten Modus nicht analysieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!