c# - 查找当前时间是否落在多个时间范围之间

标签 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结构。

任何帮助都会很棒。

最佳答案

是的,您可以使用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));

关于c# - 查找当前时间是否落在多个时间范围之间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37527006/

相关文章:

c# - 如何将 VSTO C# 代码连接到功能区和/或键盘快捷键

c# - 为什么 ListView 会触发事件,指示添加后未选中选中的项目

c# - Entity Framework 到 json - 分组数据

javascript - 处理阿拉伯语言区域时正确格式化本地 UTC 日期字符串

android - 数据范围过滤器在 Android 中使用的 SQLite 中不起作用

子过程完成后,Excel VBA 全局范围变量超出范围

c# - 如何从表格中选择内容并输出到标签?

ruby-on-rails - 检查 DateTime 值是今天、明天还是之后

javascript - 获取范围以将第一个元素设置为 setStart

python - 为什么在 Python 3.x 中的循环中使用 list() 会返回内存错误?