Heim  >  Artikel  >  Java  >  Warum kann das Paket „java.time“ von Java 8 Sekundenbruchteile im strikten Modus nicht analysieren?

Warum kann das Paket „java.time“ von Java 8 Sekundenbruchteile im strikten Modus nicht analysieren?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-02 00:35:31498Durchsuche

Why Does Java 8's `java.time` Package Fail to Parse Fraction-of-Second Values in Strict Mode?

Kann java.time den Bruchteil einer Sekunde nicht analysieren?

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

Ab Java 9 wurde das Problem behoben. Bei der ersten Version von Java 8 gab es Schwierigkeiten bei der Implementierung der Nachbarwertanalyse für Bruchteile. Diese Einschränkung behinderte die Interpretation von Feldern in Texten, die sich über mehrere Felder ohne klare Grenzen erstreckten.

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!

Stellungnahme:
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