だから私はJava 8と新しい時間APiを使用するのに十分幸運ですが、丸め関数は表示されません...
基本的には時間が...
2014-08-28T10:01.00.000 ----> 2014-08-28T10:02.00.000
2014-08-28T10:01.10.123 ----> 2014-08-28T10:02.00.000
2014-08-28T10:01.25.123 ----> 2014-08-28T10:02.00.000
2014-08-28T10:01.49.123 ----> 2014-08-28T10:02.00.000
2014-08-28T10:01.59.999 ----> 2014-08-28T10:02.00.000
これは大丈夫そうですが、正しいですか?
LocalDateTime now = LocalDateTime.now(Clock.systemUTC());
LocalDateTime newTime = now.plusMinutes(1);
System.out.println(newTime.toString());
System.out.println(newTime.format(DateTimeFormatter.ofPattern("yyyy-dd-MM'T'HH:mm:00.000")));
Java.time
APIは天井への丸めをサポートしていませんが、 床への丸め (切り捨て)をサポートしています。
LocalDateTime now = LocalDateTime.now();
LocalDateTime roundFloor = now.truncatedTo(ChronoUnit.MINUTES);
LocalDateTime roundCeiling = now.truncatedTo(ChronoUnit.MINUTES).plusMinutes(1);
さらに、1分に1回だけ刻むクロックを取得する機能があります。
Clock minuteTickingClock = Clock.tickMinutes(ZoneId.systemDefault());
LocalDateTime now = LocalDateTime.now(minuteTickingClock);
LocalDateTime roundCeiling = now.plusMinutes(1);
このクロックは、分単位で自動的に切り捨てられます(ただし、遅延キャッシュされた値を返すことができるように 指定 です)。必要に応じて、Clock
を静的変数に格納できることに注意してください。
最後に、これが複数の場所で使用する一般的な操作である場合、ライブラリ TemporalAdjuster
関数を記述して丸めを実行することができます。 (調整器は、一度作成してテストし、静的変数またはメソッドとして利用可能にすることができます)。
LocalDateTime newTime = now.plusMinutes(1).minusNanos(1).withSecond(0).withNano(0);
これは最も近い分に切り上げられ、整数部分として分を含む天井関数として機能します。
Java.time
(Java 8)の新しい時間APIには、他のライブラリと同様に丸め機能なしがあります。文字列レベルで丸めるためにフォーマットを使用しようとします。ただし、時間オブジェクトを丸めたい場合は、この丸めを手動で行うことができます。
LocalDateTime now = LocalDateTime.now(Clock.systemUTC());
LocalDateTime newTime = now.plusMinutes(1).withSecond(0).withNano(0);
ちなみに、あなたは確かに天井ではなく床を意味していませんか?
更新:
私は床に設定するためのこの少し良い方法を見つけました(明らかに唯一の丸め機能、天井はサポートされていません):
LocalDateTime now = LocalDateTime.now(Clock.systemUTC());
LocalDateTime newTime = now.plusMinutes(1).truncatedTo(ChronoUnit.MINUTES);