所以我很幸运地使用
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不支持四舍五入,但是它支持
rounding to floor(截断),可以实现所需的行为(这并不是最终的最高).
LocalDateTime now = LocalDateTime.now(); LocalDateTime roundFloor = now.truncatedTo(ChronoUnit.MINUTES); LocalDateTime roundCeiling = now.truncatedTo(ChronoUnit.MINUTES).plusMinutes(1);
此外,还有一个设施可以获得一分钟只能打勾的时钟,这可能是有意义的:
Clock minuteTickingClock = Clock.tickMinutes(ZoneId.systemDefault()); LocalDateTime now = LocalDateTime.now(minuteTickingClock); LocalDateTime roundCeiling = now.plusMinutes(1);
这个时钟将自动截断分钟到楼层(尽管是specified,这样它可能会返回延迟的缓存值).请注意,如果需要,时钟可以存储在静态变量中.
最后,如果这是要在多个地方使用的常见操作,则可以编写库TemporalAdjuster
函数来执行舍入. (调整器可以写一次,测试,并作为静态变量或方法提供).