public override bool isBusinessDay(Date date)
{
DayOfWeek w = date.DayOfWeek;
int d = date.Day, dd = date.DayOfYear;
Month m = (Month)date.Month;
int y = date.Year;
int em = easterMonday(y);
if (isWeekend(w)
// New Year's Day (possibly moved to Monday)
|| ((d == 1 || ((d == 2 || d == 3) && w == DayOfWeek.Monday)) && m == Month.January)
// Good Friday
|| (dd == em-3)
// Easter Monday
|| (dd == em)
// first Monday of May (Early May Bank Holiday)
|| (d <= 7 && w == DayOfWeek.Monday && m == Month.May)
// last Monday of May (Spring Bank Holiday)
|| (d >= 25 && w == DayOfWeek.Monday && m == Month.May && y != 2002)
// last Monday of August (Summer Bank Holiday)
|| (d >= 25 && w == DayOfWeek.Monday && m == Month.August)
// Christmas (possibly moved to Monday or Tuesday)
|| ((d == 25 || (d == 27 && (w == DayOfWeek.Monday || w == DayOfWeek.Tuesday))) && m == Month.December)
// Boxing Day (possibly moved to Monday or Tuesday)
|| ((d == 26 || (d == 28 && (w == DayOfWeek.Monday || w == DayOfWeek.Tuesday))) && m == Month.December)
// June 3rd, 2002 only (Golden Jubilee Bank Holiday)
// June 4rd, 2002 only (special Spring Bank Holiday)
|| ((d == 3 || d == 4) && m == Month.June && y == 2002)
// December 31st, 1999 only
|| (d == 31 && m == Month.December && y == 1999))
return false;
return true;
}