Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 直接扣除两个日期和扣除两天的日期时间有什么区别?_C#_Datetime - Fatal编程技术网

C# 直接扣除两个日期和扣除两天的日期时间有什么区别?

C# 直接扣除两个日期和扣除两天的日期时间有什么区别?,c#,datetime,C#,Datetime,最近我发布了一个答案,OP希望在几分钟内得到两次之间的差值。我已经提出了这样的答案 我的建议 DateTime StartDate; DateTime EndDate; TimeSpan ts = EndDate - StartDate int iMin = ts.TotalMinutes; 但是,还有一个建议给了另一个只扣除了一天时间的用户 TimeSpan ts = EndDate.TimeOfDay - StartDate.TimeOfDay 他说我的答案是完美的,日期时间值保证相隔

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

我的建议

DateTime StartDate;
DateTime EndDate;

TimeSpan ts = EndDate - StartDate
int iMin = ts.TotalMinutes;
但是,还有一个建议给了另一个只扣除了一天时间的用户

TimeSpan ts = EndDate.TimeOfDay - StartDate.TimeOfDay
他说我的答案是完美的,日期时间值保证相隔不超过24小时。

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

所以,我现在很困惑,上面两种方法的区别是什么

EndDate-StartDate
EndDate.TimeOfDay-StartDate.TimeOfDay

但是,我已经测试了我的代码,当两个日期相同时,它也可以工作 差别不止一天

你的测试一定有错误。在每种情况下,您都可能忽略了结果
TimeSpan
的天数部分

以下是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 

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

因此,如果StartDate和EndDate具有相同的日期,则这两个
TimeSpan
是相等的:

  // 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小时,也不能保证正确答案)

第一个计算两个日期之间的时间跨度,第二个仅计算同一日期之间的时间跨度。前者是正确的方法。我没有得到任何错误,但是,一个用户告诉我,我的建议需要两个日期的差异应该小于24小时?哦,真的!谢谢@Ani。但是,当我只扣除次数时,我应该使用哪种方法?它对性能有什么影响吗?您应该使用捕获所需语义的方法!今天午夜减去明天凌晨2点,你想要什么结果?1天2小时还是2小时?好的,我知道了。所以,当两个值小于24小时时,我应该使用TimeOfDay减法,否则我应该使用直接减法。再次感谢@Ani无需特殊处理“两个值小于24小时”的情况,是吗?我不明白你为什么这么做。