【问题标题】:Trying to subtract DateTime "System.FormatException: String '12/9/2019 12:00:00 AM' was not recognized as a valid DateTime."尝试减去 DateTime “System.FormatException: String '12/9/2019 12:00:00 AM' 未被识别为有效的 DateTime。”
【发布时间】:2019-12-09 10:44:29
【问题描述】:

所以我正在尝试检查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;
     }
}

【问题讨论】:

  • 日期没有格式,它们是二进制值。代码通过尝试将日期 ti 字符串转换回日期来导致错误。只需使用 orderData.ArriveTime - orderData.OrderDate 即可获得时间跨度的差异
  • 但是我得到“运算符
  • 是的,因为其余的代码也是错误的。两天之间的差异是持续时间,例如 1 小时或 1 分钟,而不是日期
  • C# 中的小时数怎么说?只有 1、2 和 3?

标签: c# datetime subtraction timespan formatexception


【解决方案1】:

日期没有格式,它们是二进制值。该代码通过尝试将日期 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

【讨论】:

    猜你喜欢
    • 2020-05-10
    • 1970-01-01
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多