Cómo saber si un DateTime se encuentra entre un DateRange en C #

Necesito saber si una Fecha se encuentra entre un DateRange. Tengo tres fechas:

// The date range DateTime startDate; DateTime endDate; DateTime dateToCheck; 

La solución fácil es hacer una comparación, pero ¿hay alguna forma más inteligente de hacerlo?

Gracias por adelantado.

No, hacer una comparación simple me parece bien:

 return dateToCheck >= startDate && dateToCheck < endDate; 

Cosas para pensar sin embargo:

  • DateTime es un tipo algo extraño en términos de zonas horarias. Podría ser UTC, podría ser "local", podría ser ambiguo. Asegúrate de que estás comparando manzanas con manzanas, por así decirlo.
  • Considere si sus puntos de inicio y fin deben ser inclusivos o exclusivos. He hecho que el código anterior lo trate como un límite inferior inclusivo y un límite superior exclusivo.

Usualmente creo la implementación de Fowler’s Range para tales cosas.

 public interface IRange { T Start { get; } T End { get; } bool Includes(T value); bool Includes(IRange range); } public class DateRange : IRange { 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 range) { return (Start <= range.Start) && (range.End <= End); } } 

El uso es bastante simple:

 DateRange range = new DateRange(startDate, endDate); range.Includes(date) 

Puede usar métodos de extensión para que sea un poco más legible:

 public static class DateTimeExtensions { public static bool InRange(this DateTime dateToCheck, DateTime startDate, DateTime endDate) { return dateToCheck >= startDate && dateToCheck < endDate; } } 

Ahora puedes escribir:

 dateToCheck.InRange(startDate, endDate) 

Puedes usar:

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

He encontrado que la siguiente biblioteca es la más útil al hacer cualquier tipo de cálculo de fecha. Todavía estoy sorprendido de que nada de esto sea parte del framework .Net.

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