2010-03-11 4 views
0

Je dois comparer trois dates dans la requête linq (datetime a < datetime b < datetime c), mais seulement les propriétés mois et jour. Comment puis-je le faire?DateTime comparant la question

+3

Pouvez-vous nous montrer ce que vous avez à ce jour? –

Répondre

3

Vous pouvez créer une nouvelle datetime avec l'année en cours:

var year = DateTime.Now.Year; 
var dateATemp = new DateTime(year, dateA.Month, dateA.Day); 
var dateBTemp = new DateTime(year, dateB.Month, dateB.Day); 
var dateCTemp = new DateTime(year, dateC.Month, dateC.Day); 

Maintenant, comparez dateATemp < dateBTemp < dateCTemp

Vous pourriez écrire une méthode d'extension à partir DateTime qui vous renverra une nouvelle instance DateTime avec l'année en cours:

public static DateTime ToDateTimeWithCurrentYear(this DateTime value) 
{ 
    return new DateTime(DateTime.Now.Year, value.Month, value.Day); 
} 

et l'utiliser comme ceci:

dateA.ToDateTimeWithCurrentYear() < dateB.ToDateTimeWithCurrentYear() < dateC.ToDateTimeWithCurrentYear() 
+1

Attention aux années bissextiles! Si la date de l'utilisateur est le 29 février mais que 'DateTime.Now' ne figure pas dans une année bissextile, alors vous frapperez une exception. A part ça, c'est similaire à ce que je vous avais suggéré +1. – LukeH

+0

merci. idée de faire cette méthode est vraiment cool. – Varyanica

+0

@Luke, très bonne prise avec l'année bissextile. Je n'y ai pas pensé. –

3

Est-ce que vous cherchez:

(a.Month < b.Month || (a.Month == b.Month && a.Day < b.Day)) && (b.Month < c.Month || (b.Month == c.Month && b.Day < c.Day)) 
+0

merci, j'ai terminé avec une comparaison comme le vôtre. – Varyanica