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

如何在Java中计算数组中所有字符串格式时长的总时长?

解决Java中多种格式时长字符串的求和问题

嘿,这个场景我太熟悉了——处理一堆格式不统一的时长字符串确实有点让人头大,但拆解成「解析单个时长→求和→转成标准格式」这几步就清晰多了。下面是具体的实现思路和可直接运行的代码:

核心思路

  1. 统一转换单位:把所有不同格式的时长都转换成秒数(最容易计算的时间单位);
  2. 求和所有秒数:遍历数组,累加每个时长对应的秒数;
  3. 转成标准格式:把总秒数再转回时:分:秒的标准格式(不足两位自动补零)。

具体代码实现

第一步:解析单个时长为秒数

写一个工具方法,根据字符串中冒号的数量判断时长格式,再计算对应的总秒数:

private static long parseDurationToSeconds(String duration) {
    String[] parts = duration.split(":");
    switch (parts.length) {
        case 2:
            // 格式:分:秒(例如0:0、0:39)
            long minutes = Long.parseLong(parts[0]);
            long seconds = Long.parseLong(parts[1]);
            return minutes * 60 + seconds;
        case 3:
            // 格式:时:分:秒(例如0:00:00、0:04:22)
            long hours = Long.parseLong(parts[0]);
            minutes = Long.parseLong(parts[1]);
            seconds = Long.parseLong(parts[2]);
            return hours * 3600 + minutes * 60 + seconds;
        default:
            throw new IllegalArgumentException("无效的时长格式:" + duration);
    }
}

第二步:将总秒数格式化为标准时长

再写一个方法,把累加后的总秒数转换成HH:mm:ss格式:

private static String formatTotalSeconds(long totalSeconds) {
    long hours = totalSeconds / 3600;
    long remainingSeconds = totalSeconds % 3600;
    long minutes = remainingSeconds / 60;
    long seconds = remainingSeconds % 60;
    // 用String.format补零,确保每个时间部分都是两位数字
    return String.format("%02d:%02d:%02d", hours, minutes, seconds);
}

第三步:完整测试示例

把上述方法整合,测试你的目标数组:

public class DurationSumCalculator {
    public static void main(String[] args) {
        String[] durations = {"0:0", "0:00:00", "0:00:39", "0:04:22"};
        
        long totalSeconds = 0;
        for (String duration : durations) {
            totalSeconds += parseDurationToSeconds(duration);
        }
        
        String totalDuration = formatTotalSeconds(totalSeconds);
        System.out.println("总时长:" + totalDuration);
        // 输出结果:00:05:01
    }

    private static long parseDurationToSeconds(String duration) {
        String[] parts = duration.split(":");
        switch (parts.length) {
            case 2:
                long minutes = Long.parseLong(parts[0]);
                long seconds = Long.parseLong(parts[1]);
                return minutes * 60 + seconds;
            case 3:
                long hours = Long.parseLong(parts[0]);
                minutes = Long.parseLong(parts[1]);
                seconds = Long.parseLong(parts[2]);
                return hours * 3600 + minutes * 60 + seconds;
            default:
                throw new IllegalArgumentException("无效的时长格式:" + duration);
        }
    }

    private static String formatTotalSeconds(long totalSeconds) {
        long hours = totalSeconds / 3600;
        long remainingSeconds = totalSeconds % 3600;
        long minutes = remainingSeconds / 60;
        long seconds = remainingSeconds % 60;
        return String.format("%02d:%02d:%02d", hours, minutes, seconds);
    }
}

额外注意事项

  • 异常处理:如果数组中可能存在格式错误的字符串(比如abc:12或1:2:3:4),可以在parseDurationToSeconds方法中添加try-catch块捕获NumberFormatException,避免程序崩溃;
  • 大数兼容:如果总时长可能超过int的范围(比如超过24天),一定要用long类型存储秒数,避免数值溢出;
  • 格式扩展:如果后续需要支持其他格式(比如1h30m),只需在parseDurationToSeconds方法中添加对应的判断逻辑即可。

内容的提问来源于stack exchange,提问作者Lawrence Hans Matjeni

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:00:37