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

C#计算起止时间耗时异常,如何实现简洁输入并得到正确结果?

问题分析与解决方案

现有代码的核心问题

  • 格式字符串HH:mm是24小时制规则,无法解析带pm的12小时制时间;且用户要求输入无需pm标识,需同步调整输入格式与解析逻辑。
  • 时间差计算方向错误:startTimeSpan - endTimeSpan会得到负数结果,正确逻辑应为结束时间减开始时间。
  • 输出格式不匹配需求:当前输出是时分字符串,而用户需要的是小数形式的小时(如1.5 hours)。

修正后的代码实现

方案一:极简下午时段输入(无需任何时段标识)

如果输入默认都是下午时间(比如6:00代表18:00,8:30代表20:30),可直接给解析后的时间加12小时:

using System;

public class Program
{
    public static void Main()
    {
        // 极简输入:仅时分,默认下午时段
        string startTime = "6:00";
        string endTime = "8:30";
        
        // 解析为基础时间,再转换为下午时段
        TimeSpan.TryParse(startTime, out TimeSpan startSpan);
        TimeSpan.TryParse(endTime, out TimeSpan endSpan);
        startSpan = startSpan.Add(TimeSpan.FromHours(12));
        endSpan = endSpan.Add(TimeSpan.FromHours(12));
        
        // 计算正确耗时
        TimeSpan elapsed = endSpan - startSpan;
        // 转换为带小数的总小时数
        double totalHours = elapsed.TotalHours;
        
        Console.WriteLine($"{totalHours} hours");
    }
}

方案二:兼容上午/下午的极简输入

若需要区分上午下午,用a/p替代冗长的am/pm,保证输入简洁:

using System;
using System.Globalization;

public class Program
{
    public static void Main()
    {
        // 极简输入:用a/p标识上午/下午
        string startTime = "6:00p";
        string endTime = "8:30p";
        
        // 定义支持的简洁格式
        string[] formats = {"h:mm\\a", "h:mm\\p", "H:mm"};
        DateTime startDt = DateTime.ParseExact(startTime, formats, CultureInfo.InvariantCulture, DateTimeStyles.None);
        DateTime endDt = DateTime.ParseExact(endTime, formats, CultureInfo.InvariantCulture, DateTimeStyles.None);
        
        TimeSpan elapsed = endDt - startDt;
        double totalHours = elapsed.TotalHours;
        
        Console.WriteLine($"{totalHours} hours");
    }
}

关键要点

  • 使用TimeSpan.TotalHours可直接获取带小数的总小时数,完美匹配1.5 hours的输出要求。
  • 两种方案都满足输入简洁的需求,无需输入p.m.类标识。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 22:30:33