最近我发布了一个答案,其中OP希望在几分钟内获得两次之间的差异。我已经提出了这样的答案。
我的建议
DateTime StartDate;
DateTime EndDate;
TimeSpan ts = EndDate - StartDate
int iMin = ts.TotalMinutes;
但是,还有另一个建议是另一位用户只扣除了TimeOfDay。
TimeSpan ts = EndDate.TimeOfDay - StartDate.TimeOfDay
他说我的答案是完美的, DateTime值保证不到24小时。
但是,我已经测试了我的代码,当两个日期差异超过一天时,它也能正常工作。
所以,我现在感到困惑的是上述两种方法的区别是什么?
EndDate - StartDate
和EndDate.TimeOfDay - StartDate.TimeOfDay
答案 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
部分,
所以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小时,也无法保证正确答案 )