ホームページ  >  記事  >  Java  >  Java.time は Java 9 以前の秒の小数部分を解析できますか?

Java.time は Java 9 以前の秒の小数部分を解析できますか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-01 16:11:02399ブラウズ

 Can Java.time Parse Fractions of Seconds Before Java 9?

java.time は秒の小数部分を解析できませんか?

はじめに

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(...) メソッドは、隣接する値の解析を処理しません。この制限により、パターンに隣接する数字が含まれる場合、秒の小数部を正しく解釈できなくなります。

代替案と更新

上記の回避策は問題を解決しますが、すべてのユースケースにとって理想的であるとは限りません。その他の代替案には次のようなものがあります。

  • SimpleDateFormat を使用しますが、分数が正しく解釈されない可能性があることに注意してください。
  • Java 9 (またはそれ以降) の公式修正が行われるまで待機します。
  • Joda-Time やTime4J.

更新: Java 9 修正

Java 9 では、この問題は解決されました。秒の小数部分は、「SS」パターンを使用して正しく解析できるようになりました。または、精度を高めるために ChronoField.MICRO_OF_SECOND フィールドまたは ChronoField.NANO_OF_SECOND フィールドを使用して、秒の小数部分を正しく解析できるようになりました。

以上がJava.time は Java 9 以前の秒の小数部分を解析できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。