所以我很幸运地使用了Java8和新的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")));发布于 2014-08-29 05:49:44
java.time接口不支持四舍五入到天花板,但是它支持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,因此它可能会返回延迟的缓存值)。请注意,如果需要,可以将Clock存储在静态变量中。
最后,如果这是您希望在多个地方使用的常见操作,则可以编写一个库TemporalAdjuster函数来执行舍入。(调整器可以编写一次、测试一次,然后作为静态变量或方法提供)。
发布于 2014-08-29 00:32:23
LocalDateTime newTime = now.plusMinutes(1).minusNanos(1).withSecond(0).withNano(0);这将向上舍入到最接近的分钟,充当以分钟为整数部分的上限函数。
发布于 2014-08-29 00:01:00
java.time (Java8中的新time API )具有,不像其他库那样具有舍入特性。您尝试使用格式化在字符串级上进行舍入。但是,如果您想对时间对象进行舍入,则可以手动进行此舍入:
LocalDateTime now = LocalDateTime.now(Clock.systemUTC());
LocalDateTime newTime = now.plusMinutes(1).withSecond(0).withNano(0);顺便说一下,你肯定是指地板,而不是天花板,不是吗?
更新:
我发现这种设置地板的方法稍微好一些(显然是唯一的四舍五入功能,不支持上限):
LocalDateTime now = LocalDateTime.now(Clock.systemUTC());
LocalDateTime newTime = now.plusMinutes(1).truncatedTo(ChronoUnit.MINUTES);https://stackoverflow.com/questions/25552023
复制相似问题