查找当前时间是否介于多个时间范围之间

时间:2016-05-30 13:33:00

标签: c# datetime range timespan

我试图根据存储在数据库中的时间范围显示商店的开放或关闭状态。

每家商店可以有2个营业时间

示例:

09:00 AM至11:00 AM和01:00 PM至10:00 PM

适用于单一时间范围:

IEnumerable<Timings> timings = allStore.ToList(); // from database

foreach (var storetime in timings)
{
TimeSpan openSpan = TimeSpan.FromTicks((long)storetime.OpenTime);

TimeSpan openLocalTime = TimeConversions.UTCTimeToLocalTime(openSpan);

DateTime openDatetime = DateTime.Today.Add(openLocalTime);

string openDisplayTime = openDatetime.ToString("hh:mm tt");

.....

TimeSpan closeLocalTime = TimeConversions.UTCTimeToLocalTime(closeSpan);

if ((now > openLocalTime) && (now < closeLocalTime))
{                        
 //Store is Open          
}

else 
{
//Store is Closed  
}

}

多个范围:

 IEnumerable<Timings> timings = allStore.ToList(); // from database

 if((timings.Any(now > d=>d.OpenTime)))  // can i use Any ?
 {

 }

这是table结构。

任何帮助都会很棒。

1 个答案:

答案 0 :(得分:0)

是的,您可以使用Any,因为您只需要当前时间一次

IEnumerable<Timings> timings = allStore.ToList(); // from database

if(timings.Any(d => (now >= d.OpenTime) && (now <= d.CloseTime)))
{

}

正如@martin建议的那样,在数据库上执行此查询可能是更好的解决方案。我不知道您的数据库是什么样的,但查询将是这样的:

bool isOpen = db.Stores
    .Single(s => s.Id = whatever)
    .OpeningHours.Any(d => (now >= d.OpenTime) && (now <= d.CloseTime));