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

在C#中实现超过24:00的时间求和(如23:00+02:00=25:00)

在C#中实现时长累加并自定义格式化输出

要实现时长累加(比如23:00 + 02:00 = 25:00),并在超过24小时时输出类似1.01:20的格式,核心是用TimeSpan类型处理时间间隔——它天生支持累加操作,再配合自定义格式化就能满足需求。

步骤1:解析单段时长为TimeSpan

首先得把输入的HH:mm格式字符串转换成TimeSpan对象,用TimeSpan.TryParseExact可以精确指定格式,避免解析错误:

// 解析HH:mm格式的时长字符串
bool ParseDuration(string durationStr, out TimeSpan duration)
{
    return TimeSpan.TryParseExact(durationStr, @"hh\:mm", null, out duration);
}

步骤2:累加所有时长

把所有解析后的TimeSpan直接相加即可得到总时长:

// 示例:累加多个时长
var durations = new List<string> { "23:00", "02:00" };
TimeSpan totalDuration = TimeSpan.Zero;

foreach (var str in durations)
{
    if (ParseDuration(str, out var span))
    {
        totalDuration += span;
    }
    else
    {
        // 处理无效格式,这里直接抛出异常,你也可以改成日志提示
        throw new ArgumentException($"无效时长格式:{str},请使用HH:mm格式");
    }
}

步骤3:自定义格式化输出

根据总时长的长度,选择对应的输出格式:

  • 不足24小时:直接输出HH:mm
  • 超过24小时:两种可选格式,按需选择:
    • 格式1:总小时数:分钟(如25:00)
    • 格式2:天.小时:分钟(如1.01:00,代表1天1小时0分钟)

实现格式化的代码:

string FormatTotalDuration(TimeSpan total)
{
    if (total.TotalHours < 24)
    {
        return total.ToString(@"hh\:mm");
    }
    else
    {
        // 格式1:输出总小时数和分钟
        // return $"{(int)total.TotalHours}:{total.Minutes:D2}";
        
        // 格式2:输出天数、小时和分钟
        return $"{total.Days}.{total.Hours:D2}:{total.Minutes:D2}";
    }
}

完整可运行示例

把上面的逻辑整合起来,就能直接运行测试:

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        // 测试用的时长列表
        var durationList = new List<string> { "23:00", "02:00", "00:45" };
        TimeSpan total = GetTotalDuration(durationList);
        string result = FormatDuration(total);
        
        Console.WriteLine($"累加结果:{result}");
        // 选格式1输出:26:45;选格式2输出:1.02:45
    }

    static TimeSpan GetTotalDuration(List<string> durationStrings)
    {
        TimeSpan total = TimeSpan.Zero;
        foreach (var str in durationStrings)
        {
            if (!ParseDuration(str, out var span))
            {
                throw new ArgumentException($"无法解析时长:{str},请确保格式为HH:mm");
            }
            total += span;
        }
        return total;
    }

    static bool ParseDuration(string durationStr, out TimeSpan duration)
    {
        return TimeSpan.TryParseExact(durationStr, @"hh\:mm", null, out duration);
    }

    static string FormatDuration(TimeSpan total)
    {
        if (total.TotalHours < 24)
        {
            return total.ToString(@"hh\:mm");
        }
        else
        {
            // 切换格式只需注释/取消注释对应行
            // return $"{(int)total.TotalHours}:{total.Minutes:D2}";
            return $"{total.Days}.{total.Hours:D2}:{total.Minutes:D2}";
        }
    }
}

注意事项

  • 如果需要支持包含秒的格式(如HH:mm:ss),只需把解析和格式化的格式字符串改成@"hh\:mm\:ss"。
  • D2用于保证分钟数是两位数字(比如1分钟显示为01),避免出现25:5这种不规范格式。
  • 如果要支持更复杂的输入格式(比如包含天数的1.02:30),可以扩展解析逻辑,先拆分天数和时分部分再转换为TimeSpan。

内容的提问来源于stack exchange,提问作者Aykut Günhan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 22:54:17