如何在Java中计算数组中所有字符串格式时长的总时长?
解决Java中多种格式时长字符串的求和问题
嘿,这个场景我太熟悉了——处理一堆格式不统一的时长字符串确实有点让人头大,但拆解成「解析单个时长→求和→转成标准格式」这几步就清晰多了。下面是具体的实现思路和可直接运行的代码:
核心思路
- 统一转换单位:把所有不同格式的时长都转换成秒数(最容易计算的时间单位);
- 求和所有秒数:遍历数组,累加每个时长对应的秒数;
- 转成标准格式:把总秒数再转回
时:分:秒的标准格式(不足两位自动补零)。
具体代码实现
第一步:解析单个时长为秒数
写一个工具方法,根据字符串中冒号的数量判断时长格式,再计算对应的总秒数:
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
相关产品推荐
相关产品推荐

