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


ここに画像の説明を入力してください