43

幸運にも Java 8 と新しい Time 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")));
4

3 に答える 3

68

API は上限へのjava.time丸めをサポートしていませんが、必要な動作を可能にする下限への丸め(切り捨て) をサポートしています (正確には上限への丸めではありません)。

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必要に応じて、a を静的変数に格納できることに注意してください。

TemporalAdjuster最後に、これが複数の場所で使用する一般的な操作である場合は、丸めを実行するライブラリ関数を作成できます。(アジャスターは、一度作成してテストし、静的変数またはメソッドとして使用可能にすることができます)。

于 2014-08-28T21:49:43.977 に答える
5
LocalDateTime newTime = now.plusMinutes(1).minusNanos(1).withSecond(0).withNano(0);

これは最も近い分に切り上げられ、分を整数部分とする上限関数として機能します。

于 2014-08-28T16:32:23.493 に答える