web-dev-qa-db-ja.com

Java 8LocalDateTime-文字列変換で.000ミリ秒を維持する方法

Stringを介して次の形式で受け取るタイムスタンプがあります。

2016-10-17T12:42:04.000

次の行を使用して、それをLocalDateTimeに変換し、それに数日を追加します(その後、Stringに戻します)。

String _120daysLater = LocalDateTime.parse("2016-10-17T12:42:04.000",
    DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS")).minusDays(120).toString());

ただし、返される応答が.000ミリ秒低下することに気付きました。

正確なパターンを確実に保持するための最もクリーンな方法がわかりません。今のところ、1ミリ秒を追加しているだけで、おそらく古いSimpleDateFormatを組み込む方法がありますが、さらに良い方法があることを望んでいました。

5
daniel9x

LocalDateTime :: toString ゼロの場合、パーツを省略します:

使用される形式は、省略された部分がゼロであると暗示される時間の完全な値を出力する最短のものになります。

toString()に依存する代わりに、 LocalDateTime :: format を使用します。

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS");
LocalDateTime _120daysLater = LocalDateTime.parse("2016-10-17T12:42:04.000", formatter).minusDays(120);

// This just uses default formatting logic in toString. Don't rely on it if you want a specific format.
System.out.println(_120daysLater.toString());

// Use a format to use an explicitly defined output format
System.out.println(_120daysLater.format(formatter));
17
Ward