2016-04-24 52 views
0

我想寫一個功能,可以檢查一家商店是否開放,但如果關閉時間是在第二天它不起作用。處理開始和結束時間店鋪

例如,如果店鋪的營業時間爲16:00至21:00,但不適用於16:00至1:00,則可以使用。

對於這些開放時間:

Sunday Open - Yes 
Sunday Start - 16:00 
SundayEnd - 01:00 

Open Monday - Yes 
Open Monday - 16:00 
MondayEnd - 01:00 

如果是週一00:30,該函數必須返回true,但並不成功。

我現在代碼:

OpenHours oh = GetOpenHours(); 
DateTime now = DateTime.Now; 
bool todayOpen = GetOpenDay(oh, now.DayOfWeek); 
TimeSpan end = GetOpenEnd(oh, now.DayOfWeek); 
TimeSpan begin = GetOpenStart(oh, now.DayOfWeek); 

if (end < begin) 
    return todayOpen && (now.TimeOfDay < end || now.TimeOfDay > begin); 
else 
    return todayOpen && (now.TimeOfDay < end && now.TimeOfDay > begin); 

我怎樣才能使這項工作?

回答

1

我會建議使用開始時間和結束時間來計算一個持續時間(TimeSpan)多久的商店將被打開。

通過這種方式,您可以根據開放時間計算適當的關閉時間,並將其與當前時間進行比較以獲得答案。

OpenHours oh = GetOpenHours(); 
DateTime now = DateTime.Now; 
bool todayOpen = GetOpenDay(oh, now.DayOfWeek); 
TimeSpan begin = GetOpenStart(oh, now.DayOfWeek);  
TimeSpan end = GetOpenEnd(oh, now.DayOfWeek); 
//Calculate duration 
TimeSpan duration = end < begin? (TimeSpan.FromHours(24) - begin) + end : end - begin; 
//calculate opening time using begin 
DateTime openingTime = DateTime.Today.Add(begin); 
//calculate closing time based on opening time and duration 
DateTime closingTime = openTime.Add(duration); 

return todayOpen && (openingTime <= now && now < closingTime);