¿Cuál es la forma más rápida y fácil de obtener el valor Min (o Max) entre dos fechas? ¿Hay un equivalente a Math.Min (& Math.Max) para las fechas?
Quiero hacer algo como:
if (Math.Min(Date1, Date2) < MINIMUM_ALLOWED_DATE) {
//not allowed to do this
}
Obviamente, el Math.Min anterior no funciona porque son fechas.
System.DateTime
instancia originalNo hay un método integrado para hacer eso. Puedes usar la expresión:
para encontrar el máximo de los dos.
Puede escribir un método genérico para calcular
Min
oMax
para cualquier tipo (siempre queComparer<T>.Default
esté configurado correctamente):También puedes usar LINQ:
fuente
Qué tal si:
Funciona con cualquier tipo que soporte
IComparable<T>
oIComparable
.En realidad, con LINQ, otra alternativa es:
fuente
Esto permite que las fechas tengan diferentes 'tipos' y devuelve la instancia que se pasó (sin devolver un nuevo DateTime construido a partir de Ticks o Milisegundos).
Tenga en cuenta que esta prueba fallaría al este de Greenwich ...
fuente
Linq.Min()
/Linq.Max()
enfoque:fuente
Si desea llamarlo más como Math.Max, puede hacer algo como este cuerpo de expresión muy breve:
fuente
¿Qué tal un
DateTime
método de extensión?Uso:
fuente
DateTime.MaxOf(dt1, dt2)
, pero no sé cómo hacerlo ...Ahora que tenemos LINQ, puede crear una matriz con sus dos valores (DateTimes, TimeSpans, lo que sea) y luego usar el método de extensión .Max ().
Se lee bien, es tan eficiente como Max puede ser, y es reutilizable para más de 2 valores de comparación.
Todo el problema a continuación preocuparse por .Kind es un gran problema ... pero lo evito al nunca trabajar en horarios locales, nunca. Si tengo algo importante con respecto a los tiempos, siempre trabajo en UTC, incluso si eso significa más trabajo para llegar allí.
fuente
http://jsfiddle.net/5CR37/
fuente