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

如何在C#中基于两个输入日期计算分钟级时间差

修正C#分钟级时间差计算代码(基于双输入日期)

原代码问题点

  1. 依赖DateTime.Now作为起始时间,未使用实际输入的生物识别数据
  2. 使用TimeSpan.Minutes/Hours仅获取时间差的分钟/小时部分,而非累计总时长(比如1小时20分的话,Minutes返回20,而非80)
  3. 直接用DateTime.Parse存在区域格式兼容风险,可能因系统设置导致解析失败

修正后的代码

// 从生物识别数据获取的两个时间输入(字符串格式)
string startDateStr = "20/09/2023 4:40:02 PM";
string endDateStr = "20/09/2023 5:22:02 PM";

// 匹配输入的日期格式:日/月/年 时:分:秒 上/下午
const string DateFormat = "dd/MM/yyyy h:mm:ss tt";
var culture = CultureInfo.InvariantCulture;

// 安全解析日期,避免格式错误或区域兼容问题
if (DateTime.TryParseExact(startDateStr, DateFormat, culture, DateTimeStyles.None, out DateTime startTime) &&
    DateTime.TryParseExact(endDateStr, DateFormat, culture, DateTimeStyles.None, out DateTime endTime))
{
    // 计算时间差(结束时间减开始时间,确保结果为正)
    TimeSpan timeDiff = endTime - startTime;

    // 获取累计总分钟数(四舍五入取整)
    int totalMinutes = (int)Math.Round(timeDiff.TotalMinutes);
    // 获取累计总小时数(保留两位小数)
    double totalHours = timeDiff.TotalHours;

    // 输出到富文本框
    richTextBox1.Text = $"Start Time: {startTime.ToString(DateFormat)}\r\n" +
                        $"End Time: {endTime.ToString(DateFormat)}\r\n" +
                        $"Total Time Difference (minutes): {totalMinutes}\r\n" +
                        $"Total Time Difference (hours): {totalHours:F2}";
}
else
{
    // 解析失败时的提示
    richTextBox1.Text = "时间格式错误,请检查输入的生物识别数据格式";
}

核心修正说明

  • 替换起始时间源:移除DateTime.Now,改用从生物识别数据获取的起始时间字符串
  • 正确计算总时长:使用TimeSpan.TotalMinutes/TotalHours获取累计总时长,而非仅取单部分数值
  • 安全解析日期:用TryParseExact指定固定格式和不变文化,避免因系统区域设置导致的解析失败,同时处理格式错误的异常情况
  • 优化输出格式:使用字符串插值简化代码,统一输出格式与输入格式一致
  • 容错处理:增加解析失败的提示,提升代码健壮性

内容的提问来源于stack exchange,提问作者Louie Jay Orellana Jayme

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 19:01:20