2014-04-01 146 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