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

实现订单时间差校验时触发DateTime格式异常,寻求解决方案

问题分析与解决方案

咱们先拆解你遇到的两个核心问题:格式解析异常和时间差判断逻辑错误,一步步来解决:

1. 解决FormatException格式解析错误

报错信息里的字符串是 12/9/2019 12:00:00 AM,这个格式是MM/dd/yyyy hh:mm:ss tt(注意日期用/分隔,上午/下午标识tt前是空格,不是冒号),但你代码里用的格式字符串是"dd-MM-yyyy hh:mm:ss:tt",完全不匹配,这就是触发异常的根本原因。

另外还有个冗余操作:如果orderData.ArriveTime和orderData.OrderDate本身已经是DateTime类型(你提到设为DateTime.Today和DateTime.Now),那根本不需要转成字符串再Parse!直接用原类型就行,多此一举的转换反而容易出问题。

2. 修正时间差判断逻辑

你的代码里犯了几个逻辑错误:

  • arriveTime.Subtract(orderDate)返回的是TimeSpan类型(表示时间间隔),不是DateTime,用Convert.ToDateTime转换完全错误;
  • 判断条件的逻辑混乱,你要的是“时间差在10分钟到2小时之间”,应该直接判断TimeSpan的总分钟数在10到120之间;
  • null判断的位置不对,应该先检查orderData.ArriveTime和orderData.OrderDate是否为null,再进行计算。

修正后的完整代码

private bool TimerRequirements(IOrderData orderData) {
    // 先判断必要字段是否为null,避免空引用异常
    if (orderData.ArriveTime == null || orderData.OrderDate == null) {
        return false; // 这里也可以根据业务需求抛异常,看你实际场景
    }

    // 如果orderData的这两个字段已经是DateTime类型,直接强转使用即可
    DateTime arriveTime = (DateTime)orderData.ArriveTime;
    DateTime orderDate = (DateTime)orderData.OrderDate;

    // 计算两个时间的间隔
    TimeSpan timeDiff = arriveTime.Subtract(orderDate);

    // 判断时间差是否在10分钟到2小时(120分钟)之间
    return timeDiff.TotalMinutes >= 10 && timeDiff.TotalMinutes <= 120;
}

额外注意点

  • 如果orderData.ArriveTime或orderData.OrderDate是字符串类型,那你需要用对应格式解析,比如匹配报错字符串的格式应该写:
    DateTime arriveTime = DateTime.ParseExact(orderData.ArriveTime.ToString(), "MM/dd/yyyy hh:mm:ss tt", CultureInfo.InvariantCulture);
    
  • 要考虑时间差为负的情况:如果ArriveTime可能早于OrderDate,可以用Math.Abs(timeDiff.TotalMinutes)来做判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:54:22