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

C#计算两个DateTime差值并转换为小时单位的double类型

原实现合理性判断

你当前的实现存在多处缺陷,不建议生产环境使用:

  • 逻辑容错性极低:当时间差≥24小时时,TimeSpan.ToString()输出会携带天数字段(格式为d.hh:mm:ss),此时按冒号拆分后第一个元素会包含天数和小时的组合值,解析结果完全错误。比如你给出的测试用例实际时间差是36小时,按你的逻辑拆分后拿到的第一个值是1.12,最终计算结果和预期完全不符。
  • 环境兼容性差:TimeSpan的字符串输出格式和当前系统区域设置强相关,部分区域的时间分隔符不是冒号,会直接导致拆分失败抛出异常。
  • 存在精度损失:你的逻辑只计算了小时和分钟部分,秒、毫秒分量会被直接丢弃,无法满足高精度统计需求。
最优实现方案

TimeSpan结构体本身已经提供了开箱即用的TotalHours属性,该属性本身就是double类型,会自动将天、小时、分钟、秒、毫秒等所有时间分量全部换算为小时总和,无需任何手动字符串处理,代码简洁且稳定性极高:

static void Main() {
    string tin = "Nov 08, 2021 4:23 PM";
    string tout = "Nov 10, 2021 4:23 AM";
    DateTime t1 = DateTime.Parse(tin);
    DateTime t2 = DateTime.Parse(tout);
    TimeSpan workingTime = t2 - t1;
    double totalHours = workingTime.TotalHours;
    Console.Write(totalHours);
}

如果你的场景需要跨时区或者涉及夏令时切换,建议将DateTime替换为DateTimeOffset解析时间,避免时区歧义导致的计算误差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 22:57:04