繁体   English   中英

试图减去 DateTime “System.FormatException: String '12/9/2019 12:00:00 AM' 未被识别为有效的 DateTime。”

[英]Trying to subtract DateTime "System.FormatException: String '12/9/2019 12:00:00 AM' was not recognized as a valid DateTime."

所以我正在尝试检查Order ArriveTimeOrderDate之间的差异应该在 10 分钟到 2 小时之间。 我将所有内容格式化为我认为正确的格式,但仍然出现错误。

我在ArriveTimeArriveTime的值是DateTime.Today ,在OrderDate我输入了DateTime.Now

代码:

private bool TimerRequirements(IOrderData orderData)
{
     DateTime arriveTime = DateTime.ParseExact(orderData.ArriveTime.ToString(), "dd-MM-yyyy hh:mm:ss:tt", CultureInfo.InvariantCulture);
     DateTime orderDate = DateTime.ParseExact(orderData.OrderDate.ToString(), "dd-MM-yyyy hh:mm:ss:tt", CultureInfo.InvariantCulture);


     if (orderData.ArriveTime != null && Convert.ToDateTime(arriveTime.Subtract(orderDate)) >= orderData.OrderDate.AddMinutes(10) ||
            orderData.ArriveTime != null && Convert.ToDateTime(arriveTime.Subtract(orderDate)) <= orderData.OrderDate.AddHours(2))
     {
         return true;
     }
     else
     {
         return false;
     }
}

日期没有格式,它们是二进制值。 该代码通过尝试将日期 ti 字符串转换回日期来导致错误。 只需使用

TimeSpan diff=orderData.ArriveTime - orderData.OrderDate;

将差异作为TimeSpan ,例如:

var diff=orderData.ArriveTime - orderData.OrderDate;
var inRange= (diff>=TimeSpan.FromMinutes(10) && diff<TimeSpan.FromHours(2));
return inRange;

两个日期之间的差异是持续时间,而不是日期。 在 .NET 中,持续时间由TimeSpan类表示。 您可以使用其构造函数或通过FromHoursFromMinutes等方法生成 TimeSpan 值

如果OrderDateArriveTimeDateTime? ,你会得到一个TimeSpan? 而不是TimeSpan 如果这些值中的任何一个为空,则差异也将为空。

在这个例子中:

class Order{
    public DateTime? OrderDate{get;set;}
    public DateTime? ArriveTime{get;set;}
}

var orderData=new Order{};
TimeSpan? diff=orderData.ArriveTime - orderData.OrderDate;

diffnull 两个比较都将返回false因此inRange将为false

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM