Was ist der schnellste und einfachste Weg, um den Min- (oder Max-) Wert zwischen zwei Daten zu ermitteln? Gibt es ein Äquivalent zu Math.Min (& Math.Max) für Daten?
Ich möchte so etwas tun wie:
if (Math.Min(Date1, Date2) < MINIMUM_ALLOWED_DATE) {
//not allowed to do this
}
Offensichtlich funktioniert die obige Math.Min nicht, weil es sich um Daten handelt.
System.DateTime
-InstanzEs gibt keine eingebaute Methode, um das zu tun. Sie können den Ausdruck verwenden:
um das Maximum der beiden zu finden.
Sie können eine generische Methode zur Berechnung
Min
oderMax
für jeden Typ schreiben (vorausgesetzt, diesComparer<T>.Default
ist entsprechend eingestellt):Sie können auch LINQ verwenden:
quelle
Wie wäre es mit:
Funktioniert mit jedem Typ, der
IComparable<T>
oder unterstütztIComparable
.Mit LINQ ist eine weitere Alternative:
quelle
Dies ermöglicht es den Datumsangaben, unterschiedliche 'Arten' zu haben, und gibt die übergebene Instanz zurück (ohne eine neue aus Ticks oder Millisekunden erstellte DateTime zurückzugeben).
Beachten Sie, dass dieser Test östlich von Greenwich fehlschlagen würde ...
quelle
Linq.Min()
/Linq.Max()
Ansatz:quelle
Wenn Sie es eher wie Math.Max nennen möchten, können Sie so etwas wie diesen sehr kurzen Ausdruckskörper tun:
quelle
Wie wäre es mit einer
DateTime
Erweiterungsmethode?Verwendungszweck:
quelle
DateTime.MaxOf(dt1, dt2)
, aber ich weiß nicht, wie ich das machen soll ...Nachdem wir LINQ haben, können Sie ein Array mit Ihren beiden Werten (DateTimes, TimeSpans usw.) erstellen und dann die Erweiterungsmethode .Max () verwenden.
Es liest sich gut, ist so effizient wie Max und kann für mehr als 2 Vergleichswerte wiederverwendet werden.
Das ganze Problem unten, sich Sorgen um .Kind zu machen, ist eine große Sache ... aber ich vermeide das, indem ich niemals in Ortszeiten arbeite. Wenn ich zeitlich etwas Wichtiges habe, arbeite ich immer in UTC, auch wenn es mehr Arbeit bedeutet, dorthin zu gelangen.
quelle
http://jsfiddle.net/5CR37/
quelle