2014-04-01 145 views
0

我有一個時間範圍11:00 PM5:00 AM(夜間範圍)如何查找時間範圍和日期範圍的重疊小時?

我有日期範圍例如, 2014-04-01 00:00:00

現在我需要計算多少夜間出現在指定日期範圍內。

對於上面的例子,它應該返回11小時59分59秒

說明:

2014-04-01 00:00 AM2014-04-01 5:00 AM =5小時

2014-04-01 11:00 PM2014-04-02 5:00 AM =6小時

2014-04-02 11:00 PM2014-04-02 11:59:59 PM = 0小時59分59秒

一秒近似值可以。

+0

你在哪裏stucked? –

+0

日期會相隔一天嗎? 2014-04-02 23:00和2014-04-10 07:00' – SWeko

回答

2

如果這些是字符串,您需要將它們解析爲DateTimeDateTime.ParseExact method,然後與-運算符區分。這讓你一個TimeSpan。我看到你的字符串有不同的格式。您需要逐個解析匹配的格式。

之後,你可以使用像TimeSpan properties;

string s = "2014-04-01 00:00 AM"; 
var date = DateTime.ParseExact(s, 
           "yyyy-MM-dd HH:mm tt", 
           CultureInfo.InvariantCulture); 
string s1 = "2014-04-01 5:00 AM"; 
var date1 = DateTime.ParseExact(s1, 
           "yyyy-MM-dd H:mm tt", 
           CultureInfo.InvariantCulture); 


TimeSpan ts = date1 - date; 
Console.WriteLine(string.Format(@"{0} hours {1} minutes {2} seconds", 
            ts.Hours, ts.Minutes, ts.Seconds)); 

輸出將是;

5 hours 0 minutes 0 seconds 

如果他們已經DateTime,只需使用-操作和使用TimeSpan結構.Hours.Minutes.Seconds性能。

有一個名爲Calculating Business Hours的項目,它計算兩個DateTime之間的營業時間。您可以根據此項目實施自己的夜班時間。

+0

嗨,謝謝你的回答。這不是時間跨度。這個問題稍有不同。我需要計算給定日期範圍內有多少個**夜班小時**。 – Sathish

+0

我的英語並不完美,但是你的意思是什麼?有沒有時間範圍轉移? –

+0

是的,這是一個時間範圍。下午11:00至凌晨5:00(夜班工作人員在工廠工作時)。基本上是晚上的時間。爲了清晰起見,編輯了問題細節。 – Sathish

0

可以使用CalendarPeriodCollectorTime Period Library for .NET的:

// ---------------------------------------------------------------------- 
public void NightHours() 
{ 
    CalendarPeriodCollectorFilter filter = new CalendarPeriodCollectorFilter(); 
    filter.CollectingHours.Add(new HourRange(0, 5)); // working hours 
    filter.CollectingHours.Add(new HourRange(23, 24)); // working hours 

    CalendarTimeRange testPeriod = 
     new CalendarTimeRange(new DateTime(2014, 4, 1), 
     new DateTime(2014, 4, 3)); 
    Console.WriteLine("Calendar period collector of period: " + testPeriod); 

    CalendarPeriodCollector collector = 
        new CalendarPeriodCollector(filter, testPeriod); 
    collector.CollectHours(); 
    Console.WriteLine("Duration: " + new DateDiff(collector.Periods.TotalDuration)); 
} // NightHours