2013-02-11 296 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