Java 8 の初期リリースでは、java.time パッケージが登場しました。秒の小数部分の解析に問題があるためです。この問題は、秒の小数部を表すために DateTimeFormatter パターンに「SS」を追加し、例外が発生したときに発生しました。
で指定されているように、秒の小数部を解析しようとしたとき「SS」パターンでは、例外がスローされました。ドキュメントではこれが機能するはずであることが示されていたため、これは驚きでした。
この問題は後に報告され、Java 9 で修正されました。ただし、Java 9 がリリースされるまでは、回避策が必要です。 。 JDK バグ レポートで述べられているように、次の回避策が使用できます。
DateTimeFormatter dtf = new DateTimeFormatterBuilder() .appendPattern("yyyyMMddHHmmss") .appendValue(ChronoField.MILLI_OF_SECOND, 3) .toFormatter();
問題の核心は、次の場合に秒の小数部がどのように解析されるかにあります。文字が隣接しています。隣接値の解析は、数値表現を前提とする appendValue(...) メソッドでのみサポートされます。小数部分によって内部的に使用される appendFraction(...) メソッドは、隣接する値の解析を処理しません。この制限により、パターンに隣接する数字が含まれる場合、秒の小数部を正しく解釈できなくなります。
上記の回避策は問題を解決しますが、すべてのユースケースにとって理想的であるとは限りません。その他の代替案には次のようなものがあります。
Java 9 では、この問題は解決されました。秒の小数部分は、「SS」パターンを使用して正しく解析できるようになりました。または、精度を高めるために ChronoField.MICRO_OF_SECOND フィールドまたは ChronoField.NANO_OF_SECOND フィールドを使用して、秒の小数部分を正しく解析できるようになりました。
以上がJava.time は Java 9 以前の秒の小数部分を解析できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。