簡體   English   中英

如何查找時間范圍和日期范圍的重疊小時數?

[英]How to find overlapping hours of a timerange and a date range?

我的時間范圍是11:00 PM5:00 AM (夜間范圍)

我有日期范圍,例如, 2014-04-01 00:00:002014-04-02 23:59:59

現在我需要計算給定日期范圍有多少夜間

對於上面的例子,它應該返回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秒

一秒鍾的近似值是可以的。

如果這些是字符串,則需要使用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屬性。

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

您可以使用.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM