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

如何在C#中计算HHH:MM格式时间字符串的差值

在C#中实现HHH:MM格式时间字符串的减法运算

这种超过24小时的时间字符串无法直接用C#自带的TimeSpan.Parse处理(默认格式不支持单独的多位数小时),最直接可靠的实现方式是通过转换为总分钟数来运算,再将结果转回目标格式。

实现步骤与代码

1. 解析时间字符串为总分钟数

先写一个辅助方法,将HHH:MM格式的字符串转换为对应的总分钟数,同时做格式校验:

private static int ParseTimeToTotalMinutes(string timeStr)
{
    var parts = timeStr.Split(':');
    if (parts.Length != 2)
        throw new ArgumentException("时间格式错误,需为HHH:MM格式");
    
    if (!int.TryParse(parts[0], out int hours) || !int.TryParse(parts[1], out int minutes))
        throw new ArgumentException("时间部分必须为整数");
    
    if (minutes < 0 || minutes > 59)
        throw new ArgumentException("分钟数需在0-59范围内");
    
    return hours * 60 + minutes;
}

2. 将分钟差值转回HHH:MM格式

再写一个方法,把减法得到的总分钟差值转换回目标格式,支持负数结果:

private static string ConvertTotalMinutesToTimeString(int totalMinutes)
{
    bool isNegative = totalMinutes < 0;
    totalMinutes = Math.Abs(totalMinutes);
    
    int hours = totalMinutes / 60;
    int minutes = totalMinutes % 60;
    
    return isNegative ? $"-{hours}:{minutes:D2}" : $"{hours}:{minutes:D2}";
}

3. 调用示例

string timeA = "150:24";
string timeB = "124:30";

try
{
    int totalA = ParseTimeToTotalMinutes(timeA);
    int totalB = ParseTimeToTotalMinutes(timeB);
    
    // 计算timeA - timeB,如需timeB - timeA则交换顺序
    int diffMinutes = totalA - totalB;
    
    string result = ConvertTotalMinutesToTimeString(diffMinutes);
    Console.WriteLine($"运算结果:{result}"); // 输出:25:54
}
catch (ArgumentException ex)
{
    Console.WriteLine($"错误:{ex.Message}");
}

额外说明

  • 若不需要处理负数结果,可移除ConvertTotalMinutesToTimeString中的负数判断逻辑
  • 代码包含格式校验,能避免非法输入导致的运行时错误
  • 该方式支持任意小时数的时间字符串,不受24小时限制

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 11:20:30