直接扣除两个日期和扣除两天的TimeOfDay有什么区别?

时间:2014-08-11 09:26:02

标签: c# datetime

最近我发布了一个答案,其中OP希望在几分钟内获得两次之间的差异。我已经提出了这样的答案。

我的建议

DateTime StartDate;
DateTime EndDate;

TimeSpan ts = EndDate - StartDate
int iMin = ts.TotalMinutes;

但是,还有另一个建议是另一位用户只扣除了TimeOfDay。

TimeSpan ts = EndDate.TimeOfDay - StartDate.TimeOfDay

他说我的答案是完美的, DateTime值保证不到24小时。

但是,我已经测试了我的代码,当两个日期差异超过一天时,它也能正常工作。

所以,我现在感到困惑的是上述两种方法的区别是什么?

EndDate - StartDateEndDate.TimeOfDay - StartDate.TimeOfDay

2 个答案:

答案 0 :(得分:3)

  

但是,我已经测试了我的代码,它可以在两个日期时工作   差异超过一天。

测试中一定有错误。在每种情况下,您可能忽略了结果TimeSpan的Days组件。

这是一个LINQPad示例:

var midnightToday = DateTime.Today;
var today2AM = midnightToday.AddHours(2);
var tomorrow2AM = today2AM.AddDays(1);

(tomorrow2AM - midnightToday).Dump("Direct Subtraction");
(tomorrow2AM.TimeOfDay - midnightToday.TimeOfDay).Dump("TimeOfDay Subtraction");

输出结果为:

Direct Subtraction 
1.02:00:00 

TimeOfDay Subtraction 
02:00:00 

答案 1 :(得分:2)

区别在于TimeOfDay删除了Date e的DateTim部分,

http://msdn.microsoft.com/query/dev11.query?appId=Dev11IDEF1&l=EN-US&k=k(System.DateTime.TimeOfDay);k(TargetFrameworkMoniker-.NETFramework,Version%3Dv4.5);k(DevLang-csharp)&rd=true

所以TimeSpan都等于同时提供StartDate和EndDate具有相同的日期:

  // 11 Aug 2014
  DateTime StartDate = new DateTime(2014, 11, 8, 0, 0, 3);   
  DateTime EndDate = new DateTime(2014, 11, 8, 23, 59, 56);   

但是如果日期部分不相同则不同

  // 12 Aug 2014 and 11 Aug 2014
  DateTime StartDate = new DateTime(2014, 11, 8, 23, 59, 59);   
  DateTime EndDate = new DateTime(2014, 12, 8, 0, 0, 44);   

请注意,值之间的差异可以尽可能小(即使差值小于24小时,也无法保证正确答案 )