2010-03-11 122 views
0

我必須比較linq查詢中的三個日期(datetime a < datetime b < datetime c),但只是屬性的月份和日期。我該怎麼做?DateTime比較問題

+3

你能告訴我們你有什麼這麼遠嗎? – 2010-03-11 12:14:39

回答

3

您可以創建與當年一個新的datetime:

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

現在比較dateATemp < dateBTemp < dateCTemp

你可以從DateTime中寫入一個擴展方法,該方法將返回當前年份的新DateTime實例:

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

,並使用它像這樣:

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

小心閏年!如果用戶的日期是2月29日,但「DateTime.Now」不在閏年,那麼你會遇到異常。除此之外,這與我所建議的+1類似。 – LukeH 2010-03-11 12:39:40

+0

謝謝。使這種方法非常酷的想法。 – Varyanica 2010-03-11 12:41:28

+0

@Luke,閏年非常好。沒有想過這個。 – 2010-03-11 13:15:42

3

這是你在找什麼:

(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

謝謝,我結束了比較像你的。 – Varyanica 2010-03-11 12:42:34