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

如何在C#中实现符合验收标准的DateTime时间校验与格式化输出?

问题修正与实现方案

原代码存在几处逻辑错误,无法正确满足验收标准,同时需要优化用户提示和输出格式化逻辑,以下是具体修正方案:

原代码问题点

  • 时间差判断逻辑错误:仅通过TimeOfDay.Hours相减会忽略跨天场景(如当前23:30,输入次日00:30)和分钟级差异,导致判断不准确
  • 循环退出逻辑错误:解析成功但时间不符合条件时直接退出循环,未引导用户重新输入
  • 错误提示不匹配:解析失败时错误提示时间条件要求,混淆了格式错误与时间合规性错误

修正后的完整代码

private DateTime _tempDateTime;
public DateTime DeliveryStart { get; set; }
public DateTime DeliveryEnd { get; set; }

// 输入并验证配送开始时间
while (true)
{
    Util.GetInput("Delivery window start (dd/mm/yyyy hh:mm)");
    string userInput = Console.ReadLine();
    
    if (DateTime.TryParse(userInput, out _tempDateTime))
    {
        // 直接比较当前时间+1小时,确保开始时间满足要求
        if (_tempDateTime >= DateTime.Now.AddHours(1))
        {
            DeliveryStart = _tempDateTime;
            break;
        }
        Console.WriteLine("\tDelivery window start must be at least one hour in the future.");
    }
    else
    {
        Console.WriteLine("\tInvalid date format. Please enter in dd/mm/yyyy hh:mm.");
    }
}

// 输入并验证配送结束时间
while (true)
{
    Util.GetInput("Delivery window end (dd/mm/yyyy hh:mm)");
    string userInput = Console.ReadLine();
    
    if (DateTime.TryParse(userInput, out _tempDateTime))
    {
        // 比较开始时间+1小时,确保结束时间满足要求
        if (_tempDateTime >= DeliveryStart.AddHours(1))
        {
            DeliveryEnd = _tempDateTime;
            break;
        }
        Console.WriteLine("\tDelivery window end must be at least one hour later than the start.");
    }
    else
    {
        Console.WriteLine("\tInvalid date format. Please enter in dd/mm/yyyy hh:mm.");
    }
}

// 生成指定格式的输出字符串
string output = $"The pickup window for your order will be {DeliveryStart.ToString("HH:mm on dd/MM/yyyy")} and {DeliveryEnd.ToString("HH:mm on dd/MM/yyyy")}";
Console.WriteLine(output);

关键说明

  1. 时间判断优化:使用DateTime.Now.AddHours(1)和DeliveryStart.AddHours(1)直接获取阈值时间,通过>=运算符完成准确比较,无需手动计算小时差
  2. 错误提示区分:分别处理日期格式错误和时间合规性错误,提升用户输入体验
  3. 格式化输出:通过ToString("HH:mm on dd/MM/yyyy")实现指定格式:
    • HH:24小时制两位小时数
    • mm:两位分钟数
    • dd:两位日期
    • MM:两位月份(注意大写,小写mm代表分钟)
    • yyyy:四位年份

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 21:50:50