Java 8 の初期リリースでは、java.time を使用して秒の小数点を解析します。パッケージで例外が発生する可能性があります。次のコードを考えてみましょう:
<code class="java">String input = "2011120312345655"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmssSS"); LocalDateTime localDateTime = LocalDateTime.parse(input, formatter);</code>
このコードは例外で失敗します:
java.time.format.DateTimeParseException
ドキュメントには、厳密モードでは入力桁と同じ数のフォーマット文字が必要であると記載されています。ただし、コードには秒の小数部を表す「SS」が含まれており、入力の桁数と矛盾しています。
この問題に対処するために、次の回避策が提案されました。
<code class="java">DateTimeFormatter dtf = new DateTimeFormatterBuilder() .appendPattern("yyyyMMddHHmmss") .appendValue(ChronoField.MILLI_OF_SECOND, 3) .toFormatter();</code>
ただし、この回避策は、「S」パターン シンボルが 2 つだけの使用例を完全にカバーしているわけではありません。 MICRO_OF_SECOND (6 SSSSSS) や NANO_OF_SECOND (9 SSSSSSSSS) などの他のフィールドを使用する必要があります。
ドキュメントによると、
「小数: ナノ秒フィールドを小数として出力します。 (...) 厳密モードで解析する場合、解析される桁数はパターン文字の数と一致する必要があります。"
これは、「S」がミリ秒だけでなく秒の小数部を表すことを意味します。 .
Java 9 では、この問題は解決されました。 Java 8 の初期リリースでは、小数部分の隣接値解析を実装する際に課題が発生しました。この制限により、明確な境界なしで複数のフィールドにまたがるテキスト内のフィールドの解釈が妨げられました。
しかし、Java 9 では、JSR-310 パーサーは隣接する値の解析で小数部分を解析する機能を獲得しました。この改善により、以前のバージョンで直面した課題が解決され、秒の小数部分の値を操作する際の柔軟性が強化されました。
以上がJava 8 の「java.time」パッケージが厳密モードで秒の小数部分の値を解析できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。