ホームページ  >  記事  >  Java  >  ドキュメントがあるにもかかわらず、java.time が秒の小数部分の解析に失敗するのはなぜですか?

ドキュメントがあるにもかかわらず、java.time が秒の小数部分の解析に失敗するのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-28 12:57:02103ブラウズ

Why Does java.time Fail to Parse Fraction-of-Second Despite Documentation?

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

ドキュメントに従っているにもかかわらず、Java で秒の小数部を解析しています。時間は問題に遭遇します。この記事では、問題を調査し、問題が解決されるまで代替解決策を提供します。

問題

DateTimeFormatter を使用して秒の小数部 (表現される) を含む文字列を解析する場合"SS" による)、例外がスローされます。この動作は、厳密モードが入力桁にフォーマット文字の数を一致させるというドキュメントの主張と矛盾します。

考えられる回避策

Java 9 (またはそれ以降) でこの問題が解決されるまで、いくつかの回避策が利用可能です:

  • appendValue() で DateTimeFormatterBuilder を使用する:
<code class="java">DateTimeFormatter dtf =
  new DateTimeFormatterBuilder()
  .appendPattern("yyyyMMddHHmmss")
  .appendValue(ChronoField.MILLI_OF_SECOND, 3)
  .toFormatter();</code>

注: このアプローチでは、2 つだけの場合は処理できない可能性があります。パターン記号 (例: "SS")。

  • Use SimpleDateFormat:
<code class="java">String input = "2011120312345655";
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSS");
Date d = sdf.parse(input);</code>

ただし、この回避策は小数部を誤って解釈する可能性もあります。 -秒の値。

  • サードパーティ ライブラリを使用する:

Joda-Time や Time4J などの外部ライブラリは、秒の小数部分の解析をサポートします。たとえば、Joda-Time:

<code class="java">String input = "2011120312345655";
DateTimeFormatter dtf = DateTimeFormat.forPattern("yyyyMMddHHmmssSS");
System.out.println(dtf.parseLocalDateTime(input));</code>

Hacky Solutions:

を使用すると、入力文字列から小数部分を手動で抽出して調整を適用できますが、このアプローチは

結論

java.time を使用した秒の小数部分の値の解析には、現在制限があります。 Java 9 でこの問題が解決されるまで、ユーザーは上記の回避策を採用できます。 SimpleDateFormat も秒の小数部分の値を誤って解釈する可能性があることにも注意してください。最終的な結果を得るには、Joda-Time や Time4J などの外部ライブラリを使用することをお勧めします。

以上がドキュメントがあるにもかかわらず、java.time が秒の小数部分の解析に失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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