2016-04-24 100 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);