java.time 秒の小数部を解析できません
ドキュメントに従っているにもかかわらず、Java で秒の小数部を解析しています。時間は問題に遭遇します。この記事では、問題を調査し、問題が解決されるまで代替解決策を提供します。
問題
DateTimeFormatter を使用して秒の小数部 (表現される) を含む文字列を解析する場合"SS" による)、例外がスローされます。この動作は、厳密モードが入力桁にフォーマット文字の数を一致させるというドキュメントの主張と矛盾します。
考えられる回避策
Java 9 (またはそれ以降) でこの問題が解決されるまで、いくつかの回避策が利用可能です:
<code class="java">DateTimeFormatter dtf = new DateTimeFormatterBuilder() .appendPattern("yyyyMMddHHmmss") .appendValue(ChronoField.MILLI_OF_SECOND, 3) .toFormatter();</code>
注: このアプローチでは、2 つだけの場合は処理できない可能性があります。パターン記号 (例: "SS")。
<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 サイトの他の関連記事を参照してください。