如何修改Java Calendar代码将时间就近取整到5分钟刻度?
修改代码实现5分钟刻度就近取整
没问题,咱们直接拆解原代码逻辑,再调整成5分钟刻度的版本就行。原代码的核心是通过取模运算判断当前分钟与目标刻度的偏移量,再根据偏移方向调整时间,改成5分钟刻度只需要修改几个关键数值:
修改后的完整代码
int unroundedMinutes = isha_jamaat_cal.get(Calendar.MINUTE); int mod = unroundedMinutes % 5; // 将取模基数从15改为5,计算当前分钟到最近5分钟刻度的偏移 // 5的中间值是2.5,所以余数小于3时往回对齐,否则往前对齐 isha_jamaat_cal.add(Calendar.MINUTE, mod < 3 ? -mod : (5 - mod));
逻辑拆解
- 取模基数调整:原代码对15取模,现在换成
5,这样能快速得到当前分钟距离最近的5分钟刻度的偏移值(比如27分的话,27%5=2,距离25分差2分钟;28分的话,28%5=3,距离30分差2分钟)。 - 判断阈值调整:原代码用
8(15的一半向上取整),现在5的中间值是2.5,所以把判断条件改成mod < 3:- 当余数是0、1、2时,当前时间更靠近上一个5分钟刻度,减去余数就能对齐;
- 当余数是3、4时,当前时间更靠近下一个5分钟刻度,用5减去余数得到需要追加的分钟数。
举几个实际例子验证:
- 当前分钟是17:17%5=2,2<3,减2后得到15分(最近的5分钟刻度)
- 当前分钟是18:18%5=3,3≥3,加2后得到20分
- 当前分钟是20:20%5=0,直接保持20分不变
这样就完美实现了就近取整到5分钟刻度的需求啦。
内容的提问来源于stack exchange,提问作者Ossama
相关产品推荐
相关产品推荐

