Javaで2または3ミリ秒の数字で日時を解析する方法は?
How Parse Date Time With Two
解決:
指定された分数でフォーマッターを作成する必要があります
DateTimeFormatter formatter = new DateTimeFormatterBuilder()。appendPattern( 'yyyy-MM-dd HH:mm:ss')。appendFraction(ChronoField.MILLI_OF_SECOND、2、3、true)// min 2 max 3 .toFormatter(); LocalDateTime formatDateTime = LocalDateTime.parse(date、formatter);
BasilBourqueとSleimanJneidiの回答は素晴らしいです。 EMH333による回答にもポイントがあることを指摘したいと思います。質問のコードを次のように非常に簡単に変更するだけで、問題が解決します。
DateTimeFormatter formatter = DateTimeFormatter.ofPattern( 'yyyy-MM-dd HH:mm:ss。[SSS] [SS]');フォーマットパターン文字列の角括弧はオプションの部分を囲んでいるため、これは秒の端数で3または2の小数を受け入れます。
- Basil Bourqueの回答に対する潜在的な利点:入力の検証が向上し、秒に小数点が1つしかない場合や小数点以下が4つある場合は反対します(これが利点であるかどうかは、状況によって異なります)。
- Sleiman Jneidiの答えに対する利点:ビルダーは必要ありません。
考えられる欠点:小数点がまったく受け入れられない(小数点が存在する限り)。
私が言ったように、他の解決策も非常に良いです。どちらを好むかは、ほとんどの場合好みの問題です。
tl; dr
フォーマッタを定義する必要はまったくありません。
LocalDateTime.parse( '2017-11-21 18:11:14.05' .replace( ''、 'T'))ISO 8601
Sleiman Jneidiによる回答は特に巧妙でハイテクですが、もっと簡単な方法があります。
java.timeクラスでデフォルトで使用される形式であるISO8601形式に準拠するように入力文字列を調整します。したがって、フォーマットパターンを指定する必要はまったくありません。デフォルトのフォーマッタは、小数秒の場合、0(全秒)から9(ナノ秒)までの任意の数の10進数を処理できます。
入力はほぼ準拠しています。真ん中のスペースをNS。
文字列入力= '2017-11-21 18:11:14.05' .replace( ''、 'T'); LocalDateTime ldt = LocalDateTime.parse(input); ldt.toString():2017-11-21T18:11:14.050