【问题标题】:What is the difference between deducting two dates directly and deducting TimeOfDay of two days?直接扣除两个日期和扣除两天的TimeOfDay有什么区别?
【发布时间】:2014-08-11 09:26:01
【问题描述】:

最近我发布了一个答案,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

【问题讨论】:

  • 第一个计算两个日期之间的时间跨度,第二个只计算同一日期的时间之间的时间跨度。前者是正确的方法。

标签: c# datetime


【解决方案1】:

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

你的测试一定有错误。在每种情况下,您可能都忽略了生成的 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 

【讨论】:

  • 我没有收到任何错误,但是有用户说我的建议需要两个日期的差应小于 24 小时? stackoverflow.com/questions/25238886/…
  • 哦,真的!谢谢@Ani。但是,当我只扣除时间时,我应该使用哪种方法?它对性能有什么影响吗?
  • 您应该使用捕获所需语义的方法!当您从今天午夜减去明天凌晨 2 点时,您想要得到什么结果? 1天2小时还是2小时?
  • 好的,我明白了。因此,当两个值小于 24 小时时,我应该使用 TimeOfDay Subtraction,否则我应该使用直接减法。再次感谢@Ani
  • “两个值小于24小时”的情况不需要特例吧?我不明白你为什么这样做。
【解决方案2】:

不同的是TimeOfDay去掉了DateTime的Date部分,

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-22
    • 2017-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多