public override DateTime CalculateDate(DateTime start, DateTime end)
{
for (var year = start.Year; year <= end.Year; year++)
{
var proposed = new DateTime(year, Month, CloseToDate);
switch (proposed.DayOfWeek)
{
case DayOfWeek.Sunday:
proposed = proposed.AddDays(1);
break;
case DayOfWeek.Monday:
break;
case DayOfWeek.Tuesday:
proposed = proposed.AddDays(-1);
break;
case DayOfWeek.Wednesday:
proposed = proposed.AddDays(-2);
break;
case DayOfWeek.Thursday:
proposed = proposed.AddDays(-3);
break;
case DayOfWeek.Friday:
proposed = proposed.AddDays(3);
break;
case DayOfWeek.Saturday:
proposed = proposed.AddDays(2);
break;
}
if (proposed >= start && proposed <= end)
{
return proposed;
}
}
throw new InvalidOperationException(string.Format(CultureInfo.InvariantCulture,
"Cannot find a suitable date between {0} and {1}", start, end));
}
}