2016-04-24 15 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 

それは月曜日夜12時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);