如何在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}"; }
代码说明
- 时间解析:用
TimeSpan.TryParse安全解析输入的HH:mm格式字符串,避免格式错误导致的异常。 - 跨天处理:如果结束时间的
TimeSpan值小于起始时间,说明是跨次日的班次,给结束时间加上24小时,确保差值为正数。 - 格式化输出:用
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
相关产品推荐
相关产品推荐

