Если startTime
и endTime
представят единственный временной интервал (то это только произойдет, как только, и startTime
и endTime
представляют дату и время для запущения/останавливания), то это столь же легко, что
bool isTimeBetween = someTime >= startTime && someTime <= endTime;
, Если это - повторяющееся событие (происходит каждый день, во время некоторого интервала), можно сделать сравнения с помощью TimeOfDay
свойство. (Повторяющийся случай является тем, где необходимо рассмотреть запущение/останавливание, которое пересекает полночь)
static public bool IsTimeOfDayBetween(DateTime time,
TimeSpan startTime, TimeSpan endTime)
{
if (endTime == startTime)
{
return true;
}
else if (endTime < startTime)
{
return time.TimeOfDay <= endTime ||
time.TimeOfDay >= startTime;
}
else
{
return time.TimeOfDay >= startTime &&
time.TimeOfDay <= endTime;
}
}
(Примечание: Этот код предполагает это, если start == end
, то он покрывает все случаи. Вы сделали комментарий с этой целью о другом сообщении)
, Например, чтобы проверить, ли это между 5:00 и 21:30
IsTimeOfDayBetween(someTime, new TimeSpan(5, 0, 0), new TimeSpan(21, 30, 0))
, Если startTime
и endTime
DateTime
с, Вы могли бы сказать
IsTimeOfDayBetween(someTime, startTime.TimeOfDay, endTime.TimeOfDay)
Таким образом, я предполагаю от вопроса, что Вы хотите знать, если дали, что время начала и время окончания в течение дня (не включая фактическую дату, т.е. 01.01.1900 или что-то как этот) видят, ли другое время со временем, определенным запуском и концом. Например, если запуск является 21:00, и конец является 9:00, примите 22:00, но отклоните 10:00.
можно сделать это любой на типы диапазона времени (времена равны, конец, после запускаются, конец, прежде запускаются), который прост:
if (end==start) return true
else if (end>start) return start<=time && time<=end
else return !(time>end && time<start)
Или можно расширить диапазон запуска и закончиться таким образом, что конец всегда, после запускаются как таковой:
if (end<=start) end += <24 hours>
if (time<start) time+= <24 hours>
return time<=end
Я предполагаю, что Вы сохраняете запуск и время окончания в конфигурационном файле приложений, таким образом, все, что в основном необходимо сделать, имеют приложение, устанавливает флаг на "на" том, когда "время начала" происходит и установило его на "прочь", когда время остановки происходит.
Тот способ, которым Вы не должны постоянно проверять, ли "теперь" "между запуском и концом" времена.
если (текущий> = запускают & & текущий < = остановка)
(или без =)
я думаю, что это - все, в чем Вы нуждаетесь?
полуночная граница является отвлекающим маневром - все, что необходимо знать, состояние обоих из сравнений.
, Если Вы делаете вещи как выходные дескриптора по-другому тогда, у Вас есть другая логика, но основные выдерживают сравнение, просто.