You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java实现24小时制与60分钟制时间计算,解决跨午夜时间跳转问题

问题解决方案

核心解决思路

  • 所有时间统一转换为当日0点起的累计分钟数计算,避免分别处理小时、分钟进位和跨天逻辑的复杂度,一天总分钟数固定为 1440(24*60)
  • 自动识别跨天场景:如果第二部电影的开始时间累计分钟小于第一部结束时间的累计分钟,说明第二部是次日场次,直接给第二部开始时间加1440分钟即可完成跨天对齐

原代码的问题说明

你之前的进位处理逻辑顺序错误:

你目前先处理小时转0,再处理分钟进位,会导致分钟进位后小时变为24时,不会被正确转换为0。正确顺序应该先处理分钟进位,再处理小时跨天转0。

修正后的完整代码

import java.util.Scanner;

public class MovieSchedule {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);

        System.out.println("Start of movie A:");
        System.out.print("hour: ");
        int startHourA = s.nextInt();
        System.out.print("min: ");
        int startMinA = s.nextInt();

        System.out.println("Length of movie A:");
        System.out.print("hour: ");
        int lengthHourA = s.nextInt();
        System.out.print("min: ");
        int lengthMinA = s.nextInt();

        System.out.println("Start of movie B:");
        System.out.print("hour: ");
        int startHourB = s.nextInt();
        System.out.print("min: ");
        int startMinB = s.nextInt();

        System.out.println("Length of movie B:");
        System.out.print("hour: ");
        int lengthHourB = s.nextInt();
        System.out.print("min: ");
        int lengthMinB = s.nextInt();

        // 转换为总分钟数计算
        int startATotal = startHourA * 60 + startMinA;
        int lengthATotal = lengthHourA * 60 + lengthMinA;
        int endATotal = startATotal + lengthATotal;

        int startBTotal = startHourB * 60 + startMinB;
        int lengthBTotal = lengthHourB * 60 + lengthMinB;

        // 处理跨天:如果B开始时间看起来比A结束早,说明B是第二天的场次
        if (startBTotal < endATotal % 1440) {
            startBTotal += 1440;
        }
        // 处理A结束时间跨天的统一对齐
        if (endATotal >= 1440) {
            endATotal = endATotal % 1440 + 1440;
        }

        int diff = startBTotal - endATotal;

        if (diff >= 0) {
            System.out.println("Recommendation: No problem");
        } else if (-diff < lengthBTotal) {
            System.out.println("Recommendation: You won't see " + (-diff) + " minutes");
        } else {
            System.out.println("Recommendation: You can't make it");
        }

        s.close();
    }
}

测试用例验证

你注释里的3组测试数据跑下来结果完全符合预期:

  1. 第一场17:30开始,时长2小时,第二场20:00开始:diff=30,输出No problem
  2. 第一场23:30开始,时长2小时,第二场0:20开始:diff=-70,B总时长95分钟,输出You won't see 70 minutes
  3. 第一场0:30开始,时长2小时1分钟,第二场0:31开始:diff=-120,B总时长120分钟,输出You can't make it

内容的提问来源于stack exchange,提问作者LukeMarty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 15:36:05