
Представьте что вы пишете динамический сайт, и нужно, чтобы в зависимости от времени суток, пользовтель видел разные сообщения. Для каждого из возможных интервалов времени необходимо написать соответствующие условия и сообщения. Если учитывать переходы между сутками, то задача немного усложняется. В этой заметке я предлагаю простое решение в виде метода расширения для структуры TimeSpan
.
Метод IsBetween
кроме самого времени time принимает два дополнительных параметра — startTime
и endTime
:
static class TimeSpanExtensions { static public bool IsBetween(this TimeSpan time, TimeSpan startTime, TimeSpan endTime) { if (endTime == startTime) { return true; } if (endTime < startTime) { return time <= endTime || time >= startTime; } return time >= startTime && time <= endTime; } }
Использовать данный метод предельно просто:
if (!DateTime.Now.TimeOfDay.IsBetween(new TimeSpan(19, 0, 0), new TimeSpan(6, 0, 0))) { Console.WriteLine("Добро пожаловать!"); } else { Console.WriteLine("Извените, сейчас мы закрыты. Время работы - с 9 з 19."); }
Обратите внимание на то, что в примере выше я проверяю именно то, время НЕ находится в интервале от 19 до 6 часов. Я намеренно сделал это чтобы показать что данный метод учитывает и переходы между сутками. Ведь следующая проверка не дала бы ожидаемого результата:
if (!(DateTime.Now.TimeOfDay > new TimeSpan(19, 0, 0) && DateTime.Now.TimeOfDay < new TimeSpan(6, 0, 0)))
Исходники качаем тут: http://devnuances.com/examples/c_sharp/CheckTimeOfDayIsBetween.zip