加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-14 05:08:38 所属栏目:Java 来源:网络整理
导读:所以我很幸运地使用 Java 8和新的时间APi,但我没有看到任何四舍五入的功能… 基本上如果时间是… 2014-08-28T10:01.00.000 ---- 2014-08-28T10:02.00.0002014-08-28T10:01.10.123 ---- 2014-08-28T10:02.00.0002014-08-28T10:01.25.123 ---- 2014-08-28T10:0
所以我很幸运地使用 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函数来执行舍入. (调整器可以写一次,测试,并作为静态变量或方法提供).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读