[英]How to find overlapping hours of a timerange and a date range?
我的時間范圍是11:00 PM
到5:00 AM
。 (夜間范圍)
我有日期范圍,例如, 2014-04-01 00:00:00
到2014-04-02 23:59:59
現在我需要計算給定日期范圍內有多少夜間 。
對於上面的例子,它應該返回11小時59分59秒
說明:
2014-04-01 00:00 AM
至2014-04-01 5:00 AM
= 5小時
2014-04-01 11:00 PM
至2014-04-02 5:00 AM
= 6小時
2014-04-02 11:00 PM
到2014-04-02 11:59:59 PM
= 0小時59分59秒
一秒鍾的近似值是可以的。
如果這些是字符串,則需要使用DateTime.ParseExact
方法將它們解析為DateTime
,然后使用-
運算符區分它們。 這會讓你成為TimeSpan
。 我看到你的字符串有不同的格式。 您需要逐個解析匹配的格式。
之后,您可以使用TimeSpan
屬性 ;
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
屬性。
您可以使用.NET時間段庫的CalendarPeriodCollector :
// ----------------------------------------------------------------------
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.