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

如何在C#中计算跨班次的起止时间差(输出Hour.Minute格式)

C# 计算跨班次时间差并按 Hour.Minute 格式输出

核心思路

因为时间可能跨天(结束时间早于起始时间),直接用TimeSpan相减会得到负数,所以需要先判断:如果结束时间小于起始时间,就给结束时间加上24小时,再计算差值,最后格式化输出。

实现代码

public static string CalculateShiftTimeDiff(string startTimeStr, string endTimeStr)
{
    // 解析输入的时间字符串为TimeSpan
    if (!TimeSpan.TryParse(startTimeStr, out TimeSpan startTime) || 
        !TimeSpan.TryParse(endTimeStr, out TimeSpan endTime))
    {
        throw new ArgumentException("请输入正确的HH:mm格式时间");
    }

    // 处理跨天情况:结束时间早于起始时间,视为次日时间,加24小时
    if (endTime < startTime)
    {
        endTime = endTime.Add(TimeSpan.FromHours(24));
    }

    // 计算时间差
    TimeSpan diff = endTime - startTime;

    // 格式化为「小时.分钟」,分钟补零保持两位
    return $"{diff.Hours}.{diff.Minutes:D2}";
}

代码说明

  1. 时间解析:用TimeSpan.TryParse安全解析输入的HH:mm格式字符串,避免格式错误导致的异常。
  2. 跨天处理:如果结束时间的TimeSpan值小于起始时间,说明是跨次日的班次,给结束时间加上24小时,确保差值为正数。
  3. 格式化输出:用D2格式符保证分钟始终显示两位数字(比如5分钟显示为05),最终输出小时.分钟的格式。

测试示例

  • 输入:startTimeStr = "08:30",endTimeStr = "15:00" → 输出:6.30
  • 输入:startTimeStr = "15:30",endTimeStr = "04:30" → 输出:13.00
  • 输入:startTimeStr = "23:45",endTimeStr = "02:15" → 输出:2.30

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 08:01:22