首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Java 8实现到上限的循环分钟数

使用Java 8实现到上限的循环分钟数
EN

Stack Overflow用户
提问于 2014-08-28 22:58:57
回答 3查看 31.1K关注 0票数 43

所以我很幸运地使用了Java8和新的time APi,但是我没有看到任何舍入函数……

基本上如果时间是...

代码语言:javascript
复制
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

这似乎是可以的,但它是正确的吗?

代码语言:javascript
复制
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")));
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-08-29 05:49:44

java.time接口不支持四舍五入到天花板,但是它支持rounding to floor (截断),从而实现所需的行为(并不是精确地四舍五入到天花板):

代码语言:javascript
复制
LocalDateTime now =  LocalDateTime.now();
LocalDateTime roundFloor =  now.truncatedTo(ChronoUnit.MINUTES);
LocalDateTime roundCeiling =  now.truncatedTo(ChronoUnit.MINUTES).plusMinutes(1);

此外,还有一种工具可以获取一分钟仅滴答一次的时钟,这可能是您感兴趣的:

代码语言:javascript
复制
Clock minuteTickingClock = Clock.tickMinutes(ZoneId.systemDefault());
LocalDateTime now =  LocalDateTime.now(minuteTickingClock);
LocalDateTime roundCeiling =  now.plusMinutes(1);

此时钟将自动将分钟缩短到最低点(尽管它是specified,因此它可能会返回延迟的缓存值)。请注意,如果需要,可以将Clock存储在静态变量中。

最后,如果这是您希望在多个地方使用的常见操作,则可以编写一个库TemporalAdjuster函数来执行舍入。(调整器可以编写一次、测试一次,然后作为静态变量或方法提供)。

票数 68
EN

Stack Overflow用户

发布于 2014-08-29 00:32:23

代码语言:javascript
复制
LocalDateTime newTime = now.plusMinutes(1).minusNanos(1).withSecond(0).withNano(0);

这将向上舍入到最接近的分钟,充当以分钟为整数部分的上限函数。

票数 5
EN

Stack Overflow用户

发布于 2014-08-29 00:01:00

java.time (Java8中的新time API )具有,不像其他库那样具有舍入特性。您尝试使用格式化在字符串级上进行舍入。但是,如果您想对时间对象进行舍入,则可以手动进行此舍入:

代码语言:javascript
复制
LocalDateTime now =  LocalDateTime.now(Clock.systemUTC());
LocalDateTime newTime =  now.plusMinutes(1).withSecond(0).withNano(0);

顺便说一下,你肯定是指地板,而不是天花板,不是吗?

更新:

我发现这种设置地板的方法稍微好一些(显然是唯一的四舍五入功能,不支持上限):

代码语言:javascript
复制
LocalDateTime now =  LocalDateTime.now(Clock.systemUTC());
LocalDateTime newTime =  now.plusMinutes(1).truncatedTo(ChronoUnit.MINUTES);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25552023

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档