這裏是我的解決方案。它使用DayOfYear
找到一個匹配項。但是如果開始日期的DayOfYear
超過了結束日期的DayOfYear
,則必須小心。我假定,開始日期比結束日期更早:
private static bool HasBirthDay(DateTime birthday, DateTime start, DateTime end)
{
Debug.Assert(start < end);
if(start.DayOfYear < end.DayOfYear)
{
if(birthday.DayOfYear > start.DayOfYear && birthday.DayOfYear < end.DayOfYear)
{
return true;
}
}
else
{
if(birthday.DayOfYear < end.DayOfYear || birthday.DayOfYear > start.DayOfYear)
{
return true;
}
}
return false;
}
// DayOfYear(start date) > DayOfYear(end date)
var start = new DateTime(2008, 12, 25);
var end = new DateTime(2009, 1, 3);
Debug.Assert(HasBirthDay(new DateTime(2000, 1, 2), start, end));
Debug.Assert(HasBirthDay(new DateTime(2000, 12, 26), start, end));
Debug.Assert(!HasBirthDay(new DateTime(2000, 1, 5), start, end));
Debug.Assert(!HasBirthDay(new DateTime(2000, 12, 24), start, end));
// DayOfYear(start date) < DayOfYear(end date)
start = new DateTime(2008, 10, 25);
end = new DateTime(2008, 11, 3);
Debug.Assert(HasBirthDay(new DateTime(2000, 10, 26), start, end));
Debug.Assert(!HasBirthDay(new DateTime(2000, 12, 5), start, end));
Debug.Assert(!HasBirthDay(new DateTime(2000, 1, 24), start, end));
+1因爲這個問題是麻煩很多比它看起來! – NibblyPig 2010-03-31 14:31:20
不要忘記,事情變得更狡猾的閏年:) – 2010-03-31 14:33:21
實際上閏年不會有任何區別:) – NibblyPig 2010-03-31 14:40:37