如何在java中将时间舍入到最接近的一刻钟?
鉴于今天的时间,例如下午2:24,我如何让它四舍五入到下午2:30?
同样,如果时间是下午2:17,我如何让它四舍五入到下午2:15?
鉴于今天的时间,例如下午2:24,我如何让它四舍五入到下午2:30?
同样,如果时间是下午2:17,我如何让它四舍五入到下午2:15?
您需要使用模来截断一刻钟:
Date whateverDateYouWant = new Date();
Calendar calendar = Calendar.getInstance();
calendar.setTime(whateverDateYouWant);
int unroundedMinutes = calendar.get(Calendar.MINUTE);
int mod = unroundedMinutes % 15;
calendar.add(Calendar.MINUTE, mod < 8 ? -mod : (15-mod));
正如EJP所指出的,这也是可以的(替换最后一行,只有在日历宽松时才有效):
calendar.set(Calendar.MINUTE, unroundedMinutes + mod);
如果你想精确,你还必须截断较小的字段:
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
你也可以使用来自Apache Commons / Lang的DateUtils.truncate()来做到这一点:
calendar = DateUtils.truncate(calendar, Calendar.MINUTE);
如果您只想向下舍入,这是使用Java Time API的更具可读性的版本:
LocalDateTime time = LocalDateTime.now();
LocalDateTime lastQuarter = time.truncatedTo(ChronoUnit.HOURS)
.plusMinutes(15 * (time.getMinute() / 15));
输出:
2016-11-04T10:58:10.228
2016-11-04T10:45:00