计算两个时分格式时间的毫秒差值 跨天场景计算异常咨询
问题排查
你提供的原有代码存在两处核心问题:
- 语法错误:代码中使用的
m、tm均为未声明变量,且分钟差值计算不需要额外分支判断,直接计算(m2 - m1) * 60000后累加即可,正负值会自动修正计算结果。 - 逻辑缺失:未处理第二个时间早于第一个时间的跨天场景,当目标时间为次日时,直接做差得到的是负数,没有自动补充24小时对应的毫秒数,因此跨天计算结果不符合预期。
修正后的代码实现
public static long millisBetweenTimes(int h1, int m1, int h2, int m2) { // 分别计算两个时间从当天0点开始的总毫秒数 long time1Millis = (h1 * 60L + m1) * 60000; long time2Millis = (h2 * 60L + m2) * 60000; long diff = time2Millis - time1Millis; // 差值为负说明第二个时间是次日,补充1天的毫秒数 return diff < 0 ? diff + 24 * 60 * 60000 : diff; }
逻辑说明
- 先把两个时间统一转换为当天0点到对应时间的总毫秒数,避免小时和分钟分开计算的逻辑冗余
- 差值为负时默认第二个时间为次日,补充1天的毫秒数即可覆盖你提到的周日到周一的跨天场景
- 如果需要支持跨多天的计算,需要额外传入两个时间对应的日期偏移量参数,仅靠小时、分钟两个参数最多只能支持跨1天的场景
内容的提问来源于stack exchange,提问作者איתן רבינוביץ
相关产品推荐
相关产品推荐

