2013-02-11 156 views
1

我只是试图找到一个逻辑来解决这个问题,但我坚持。用重叠时间计算时间差

我在我的数据库中有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分钟

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

由于提前

回答

3

不知道时间跨度将如何在此情况帮助。

TimeSpanTimeSpan通过减去较早的时间而产生的结果是负的。例如,

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."); 
} 
+0

感谢dasblinkenlight,如果我错了纠正我,所以我必须勾选“滴答”的所有两个日期之间,如果没有负面的话,我可以减去,如果没有得到负值并加回。 – Usher 2013-02-11 03:23:50

+0

为例如:ENDDATE2 = {14/1/2012下午12点三十分00秒} StartDate3 = {14/1/2012 12:00:00 PM} 变种DT1 = DateTime.Parse(ENDDATE2); var dt2 = DateTime.Parse(StartDate3); var diff = dt2.Subtract(dt1); 如果(diff.Ticks <0){ 这里 得到这意味着-30 差} 现在减去 之间的时间(StartDate3 - 结束DATE3)-30分钟。 这是逻辑有意义的 – Usher 2013-02-11 03:27:17

+1

@Usher,如果你想检查开始日期是否晚于结束日期,你可以简单地使用'if(startDate> endDate)'。这可能更有意义,然后计算差异并检查其正/负号。 – 2013-02-11 03:31:32