日期时间 – 使用Java 8进行圆顶分钟

前端之家收集整理的这篇文章主要介绍了日期时间 – 使用Java 8进行圆顶分钟前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
所以我很幸运地使用 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("@R_301_112@-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函数来执行舍入. (调整器可以写一次,测试,并作为静态变量或方法提供).

猜你在找的Java相关文章