Quelle est la manière la plus rapide et la plus simple d'obtenir la valeur Min (ou Max) entre deux dates? Existe-t-il un équivalent de Math.Min (& Math.Max) pour les dates?
Je veux faire quelque chose comme:
if (Math.Min(Date1, Date2) < MINIMUM_ALLOWED_DATE) {
//not allowed to do this
}
Évidemment, Math.Min ci-dessus ne fonctionne pas car ce sont des dates.
System.DateTime
perdez complètement toutes les informations (sauf les tiques) de l' instance originaleIl n'y a pas de méthode intégrée pour le faire. Vous pouvez utiliser l'expression:
pour trouver le maximum des deux.
Vous pouvez écrire une méthode générique pour calculer
Min
ouMax
pour tout type (à condition qu'elleComparer<T>.Default
soit définie de manière appropriée):Vous pouvez également utiliser LINQ:
la source
Que diriez-vous:
Fonctionne avec tout type qui prend en charge
IComparable<T>
ouIComparable
.En fait, avec LINQ, une autre alternative est:
la source
Cela permet aux dates d'avoir différents «types» et renvoie l'instance qui a été transmise (sans renvoyer un nouveau DateTime construit à partir de ticks ou de millisecondes).
Notez que ce test échouerait à l'est de Greenwich ...
la source
Linq.Min()
/Linq.Max()
approche:la source
Si vous voulez l'appeler plus comme Math.Max, vous pouvez faire quelque chose comme ce corps d'expression très court:
la source
Que diriez-vous d'une
DateTime
méthode d'extension?Usage:
la source
DateTime.MaxOf(dt1, dt2)
, mais je ne sais pas comment faire ça ...Maintenant que nous avons LINQ, vous pouvez créer un tableau avec vos deux valeurs (DateTimes, TimeSpans, peu importe), puis utiliser la méthode d'extension .Max ().
Il se lit bien, il est aussi efficace que Max et peut être réutilisé pour plus de 2 valeurs de comparaison.
Tout le problème ci-dessous est inquiétant pour .Kind est un gros problème ... mais j'évite cela en ne travaillant jamais à l'heure locale, jamais. Si j'ai quelque chose d'important concernant les horaires, je travaille toujours à l'UTC, même si cela signifie plus de travail pour y arriver.
la source
http://jsfiddle.net/5CR37/
la source