2010-03-11 165 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