如何知道当前时间是否介于两个时间段之间?

Thu*_*3eR 3 c# asp.net-mvc timespan

我有两个这样的时间跨度:

TimeSpan Starttime : 16:37:00
TimeSpan EndTime: 17:37:00
Run Code Online (Sandbox Code Playgroud)

当前时间:

DateTime currentDate = DateTime.Now;
TimeSpan now = currentDate.TimeOfDay;
Run Code Online (Sandbox Code Playgroud)

问题:

我无法弄清楚如何知道当前时间是否在开始时间和结束时间之间.我想只在这两个时间盘之间发送消息.

我该怎么做呢?

我的尝试:

 if(startTime.Hours < now.Hours && endTime.Hours > now.Hours)
   // do stuff
Run Code Online (Sandbox Code Playgroud)

这并不涵盖所有场景,因为我需要它恰好在starttime和endtime之间到最后一秒,但我不知道如何做到这一点.

Jon*_*eet 15

你可以使用:

if (startTime < now && now < endTime)
Run Code Online (Sandbox Code Playgroud)

注意:

  • 这不会检查日期; 这看起来不像是一个问题
  • 根据您这样做的原因,您可能需要考虑诸如"10 pm-2am"之间的时间间隔,此时您实际上想要反转逻辑
  • 在大多数情况下,值得制定下限包含和上限独占,例如

    if (startTime <= now && now < endTime)
    
    Run Code Online (Sandbox Code Playgroud)

    这很有用,因为那时你可以有几个间隔,其中一个间隔的结束是下一个间隔的开始,任何一个时间恰好是一个间隔.

要处理"10 pm-2am"示例,您需要以下内容:

if (interval.StartTime < interval.EndTime)
{
    // Normal case, e.g. 8am-2pm
    return interval.StartTime <= candidateTime && candidateTime < interval.EndTime;
}
else
{
    // Reverse case, e.g. 10pm-2am
    return interval.StartTime <= candidateTime || candidateTime < interval.EndTime;
}
Run Code Online (Sandbox Code Playgroud)