用重叠时间计算时差

时间:2013-02-11 02:59:51

标签: c#

我只是想找到一个解决这个问题的逻辑但是被卡住了。

我的数据库中有6个日期时间列。如下所示

StartDate =  {14/1/2012 11:00:00 AM}
EndDate=     {14/1/2012 11:30:00 AM}

**Break between start and End Date is 30 mins**

StartDate2 = {14/1/2012 11:30:00 AM}
EndDate2=    {14/1/2012 12:30:00 PM}

**Break between start1 and End1 Date is 1hr**

StartDate3 = {14/1/2012 12:00:00 PM}
EndDate3=    {14/1/2012 01:30:00 PM}
**Break between start2 and End2 Date is 1hr is 1hr**

我试图在每个日期集之间找到休息时间并总结最终日期。

例如:

StartDate =  {14/1/2012 11:00:00 AM}
EndDate=     {14/1/2012 11:30:00 AM}

开始日期和结束日期之间的间隔为30分钟。

但如果您看到开始和结束日期2和3,则时间重叠。所以不确定在这种情况下,时间跨度将有多大帮助。

所有三个时间戳和总和之间的总休息时间应为2小时30分钟

请一些人提出一些想法来解决这个问题。

先谢谢

1 个答案:

答案 0 :(得分:3)

  

不确定在这种情况下,时间跨度有多大帮助。

通过从较早时间减去较晚时间而产生的

TimeSpan将为负数。例如,

var dt1 = DateTime.Parse("02/10/2013 12:20");
var dt2 = DateTime.Parse("02/10/2013 12:00");
Console.WriteLine(dt2.Subtract(dt1));

prints -00:20:00

您可以检查间隔是否为负值以检测重叠。一种方法是检查Ticks属性为否定:

var dt1 = DateTime.Parse("02/10/2013 12:20");
var dt2 = DateTime.Parse("02/10/2013 12:00");
var diff = dt2.Subtract(dt1);
if (diff.Ticks < 0) {
    Console.WriteLine("An overlap is detected.");
}