文字列にnanoOfSecondsがあるかどうかにかかわらず、文字列をLocalTime(jodaではなくJava-8)に変換する必要があります。文字列の形式は07:06:05
または07:06:05.123456
の形式です。文字列は秒の小数点以下の桁数がある場合とない場合があり、その場合、ナノ秒部分を表す文字がいくつあってもかまいません。
次のようなDateTimeForamtterの使用
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("H:mm:ss");
または
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("H:mm:ss.SSSSSS");
IFステートメントを使用して、次のような2つの形式を区別できます。
DateTimeFormatter dtf;
if (time1.contains(".") {
dtf = DateTimeFormatter.ofPattern("H:mm:ss.SSSSSS);
} else {
dtf = DateTimeFormatter.ofPattern("H:mm:ss);
}
これは問題なく機能し、私はこれで問題ありませんが、小数点以下のさまざまな桁数も使用できるようにする必要があります。
サンプルデータセットは次のようになります。
[11:07:59.68750, 11:08:00.781250, 11:08:00.773437500, 11:08:01]
フォーマッターが小数点以下の桁数が不明なときにJava.time.format.DateTimeParseException
をスローせずに、小数点以下の桁数を解析できるようにする方法はありますか?
本当にシンプルなものが足りないことを願っています。
このフォーマットを解析するために特別なことをする必要はありません。 LocalTime.parse(String)
はすでにオプションのナノ秒を処理しています:
System.out.println(LocalTime.parse("10:15:30"));
System.out.println(LocalTime.parse("10:15:30."));
System.out.println(LocalTime.parse("10:15:30.1"));
System.out.println(LocalTime.parse("10:15:30.12"));
System.out.println(LocalTime.parse("10:15:30.123456789"));
これには、フォーマットパターンの「オプションセクション」を使用できます。
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("H:mm:ss[.SSSSSS]");