Как узнать, если DateTime находится между DateRange в C#



Мне нужно знать, если дата находится между периода. У меня есть три даты:



// The date range
DateTime startDate;
DateTime endDate;

DateTime dateToCheck;


простое решение делает сравнение, но есть ли более умный способ сделать это?



спасибо заранее.

599   5  

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)

вы можете использовать:

return (dateTocheck >= startDate && dateToCheck <= endDate);

Я нашел следующую библиотеку, чтобы быть наиболее полезным при выполнении любого рода даты математики. Я все еще удивлен, что ничего подобного не является частью .Net framework.

http://www.codeproject.com/Articles/168662/Time-Period-Library-for-NET

Comments

    Ничего не найдено.