如何知道当前时间是否在两个时间跨度之间?

How to know if current time is between two timespans?

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

TimeSpan Starttime : 16:37:00
TimeSpan EndTime: 17:37:00

当前时间:

DateTime currentDate = DateTime.Now;
TimeSpan now = currentDate.TimeOfDay;

问题:

我不知道如何知道当前时间是否在开始时间和结束时间之间。我只想在这两个时间跨度之间发送消息。

我该怎么做?

我的尝试:

 if(startTime.Hours < now.Hours && endTime.Hours > now.Hours)
   // do stuff

这并没有涵盖所有情况,因为我需要它恰好在开始时间和结束时间之间到最后一秒,但我不知道该怎么做。

您可以只使用:

if (startTime < now && now < endTime)

注意:

  • 这不检查日期;看起来这不是问题
  • 根据您这样做的原因,您可能需要考虑时间间隔,例如“晚上 10 点到凌晨 2 点”,此时您实际上想要反转逻辑
  • 在大多数情况下,下限包含和上限排除是值得的,例如

    if (startTime <= now && now < endTime)
    

    这很有用,因为您可以有多个间隔,其中一个间隔的结束是下一个间隔的开始,并且任何一次都恰好在一个间隔中。

要处理“晚上 10 点到凌晨 2 点”示例,您需要如下内容:

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;
}