尝试减去 DateTime "System.FormatException: String '12/9/2019 12:00:00 AM' was not recognized as a valid DateTime."
Trying to subtract DateTime "System.FormatException: String '12/9/2019 12:00:00 AM' was not recognized as a valid DateTime."
所以我正在尝试检查 Order
。 ArriveTime
和 OrderDate
之间的差异应该在 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 字符串转换回日期来导致错误。只需使用
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 class 表示。您可以使用其构造函数或通过 FromHours 和 FromMinutes
等方法生成 TimeSpan 值
如果 OrderDate
和 ArriveTime
是 DateTime?
,您将得到 TimeSpan?
而不是 TimeSpan
。如果这些值中的任何一个为空,则差值也将为空。
在这个例子中:
class Order{
public DateTime? OrderDate{get;set;}
public DateTime? ArriveTime{get;set;}
}
var orderData=new Order{};
TimeSpan? diff=orderData.ArriveTime - orderData.OrderDate;
diff
是 null
。两个比较都将 return false
所以 inRange
将是 false
所以我正在尝试检查 Order
。 ArriveTime
和 OrderDate
之间的差异应该在 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 字符串转换回日期来导致错误。只需使用
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 class 表示。您可以使用其构造函数或通过 FromHours 和 FromMinutes
等方法生成 TimeSpan 值如果 OrderDate
和 ArriveTime
是 DateTime?
,您将得到 TimeSpan?
而不是 TimeSpan
。如果这些值中的任何一个为空,则差值也将为空。
在这个例子中:
class Order{
public DateTime? OrderDate{get;set;}
public DateTime? ArriveTime{get;set;}
}
var orderData=new Order{};
TimeSpan? diff=orderData.ArriveTime - orderData.OrderDate;
diff
是 null
。两个比较都将 return false
所以 inRange
将是 false