valor obtener net fecha convertir como asignar actual c# .net datetime date-range

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



obtener la fecha de un datetimepicker en vb net (5)

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.

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);


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

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); } }

El uso es bastante simple:

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