Как узнать, является ли DateTime между DateRange в С#
Мне нужно знать, существует ли дата между DateRange. У меня три даты:
// The date range
DateTime startDate;
DateTime endDate;
DateTime dateToCheck;
Простое решение делает сравнение, но есть ли более разумный способ сделать это?
Спасибо заранее.
Ответы
Ответ 1
Нет, простое сравнение выглядит хорошо для меня:
return dateToCheck >= startDate && dateToCheck < endDate;
О чем подумать:
-
DateTime
является несколько нечетным типом по часовым поясам. Это может быть UTC, это может быть "локально", это может быть неоднозначно. Убедитесь, что вы сравниваете яблоки с яблоками.
- Учитывайте, должны ли ваши начальные и конечные пункты включать или исключать. Я сделал код выше, рассматривая его как инклюзивную нижнюю границу и исключительную верхнюю границу.
Ответ 2
Обычно я создаю Fowler Range для таких вещей.
public interface IRange<T>
{
T Start { get; }
T End { get; }
bool Includes(T value);
bool Includes(IRange<T> range);
}
public class DateRange : IRange<DateTime>
{
public DateRange(DateTime start, DateTime end)
{
Start = start;
End = end;
}
public DateTime Start { get; private set; }
public DateTime End { get; private set; }
public bool Includes(DateTime value)
{
return (Start <= value) && (value <= End);
}
public bool Includes(IRange<DateTime> range)
{
return (Start <= range.Start) && (range.End <= End);
}
}
Использование довольно просто:
DateRange range = new DateRange(startDate, endDate);
range.Includes(date)
Ответ 3
Вы можете использовать методы расширения, чтобы сделать его более читаемым:
public static class DateTimeExtensions
{
public static bool InRange(this DateTime dateToCheck, DateTime startDate, DateTime endDate)
{
return dateToCheck >= startDate && dateToCheck < endDate;
}
}
Теперь вы можете написать:
dateToCheck.InRange(startDate, endDate)
Ответ 4
Вы можете использовать:
return (dateTocheck >= startDate && dateToCheck <= endDate);
Ответ 5
Ive нашел следующую библиотеку наиболее полезной при выполнении какой-либо математики даты. Я все еще удивляюсь тому, что это часть инфраструктуры .Net.
http://www.codeproject.com/Articles/168662/Time-Period-Library-for-NET