Как узнать, если DateTime находится между DateRange в C#
Мне нужно знать, если дата находится между периода. У меня есть три даты:
// The date range
DateTime startDate;
DateTime endDate;
DateTime dateToCheck;
простое решение делает сравнение, но есть ли более умный способ сделать это?
спасибо заранее.
5 ответов:
нет, делать простое сравнение выглядит хорошо для меня:
return dateToCheck >= startDate && dateToCheck < endDate;вещи, чтобы думать о том, хотя:
DateTimeявляется несколько странным типом с точки зрения часовых поясов. Это может быть UTC, это может быть "локально", это может быть неоднозначно. Убедитесь, что вы сравниваете яблоки с яблоками, как это было.- подумайте, должны ли ваши начальная и конечная точки быть включительными или исключительными. Я сделал код выше рассматривать его как включающую нижнюю границу и эксклюзивный верхний связанный.
обычно я создаю диапазон Фаулера реализация для таких вещей.
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)
Вы можете использовать методы расширения, чтобы сделать его немного более читаемым:
public static class DateTimeExtensions { public static bool InRange(this DateTime dateToCheck, DateTime startDate, DateTime endDate) { return dateToCheck >= startDate && dateToCheck < endDate; } }теперь вы можете написать:
dateToCheck.InRange(startDate, endDate)
Я нашел следующую библиотеку, чтобы быть наиболее полезным при выполнении любого рода даты математики. Я все еще удивлен, что ничего подобного не является частью .Net framework.
http://www.codeproject.com/Articles/168662/Time-Period-Library-for-NET
Comments