试图减去DateTime“ System.FormatException:字符串'12 / 9/2019 12:00:00 AM'被识别为无效的DateTime。”

问题描述 投票:0回答:1

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

我在ArriveTime中输入的值是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;
     }
}
c# datetime subtraction timespan formatexception
1个回答
2
投票

日期没有格式,它们是二进制值。该代码通过尝试将日期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。如果这些值中的任何一个为null,则差异也将为null。

在此示例中:

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

© www.soinside.com 2019 - 2024. All rights reserved.