如何在java中将时间舍入到最接近的一刻钟?

2022-08-31 14:50:00

鉴于今天的时间,例如下午2:24,我如何让它四舍五入到下午2:30?

同样,如果时间是下午2:17,我如何让它四舍五入到下午2:15?


答案 1

舍入

您需要使用模来截断一刻钟:

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 / LangDateUtils.truncate()来做到这一点:

calendar = DateUtils.truncate(calendar, Calendar.MINUTE);

答案 2

如果您只想向下舍入,这是使用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