Количество праздников перемещается из года в год.Например, в Канаде день Виктории (он же выходные два-четыре мая) - это понедельник до 25 мая, или День благодарения - второй понедельник октября (в Канаде).
Я использовал варианты этого запроса Linq, чтобы получить дату выходного дня для данного года:
var year = 2011;
var month = 10;
var dow = DayOfWeek.Monday;
var instance = 2;
var day = (from d in Enumerable.Range(1,DateTime.DaysInMonth(year,month))
let sample = new DateTime(year,month,d)
where sample.DayOfWeek == dow
select sample).Skip(instance-1).Take(1);
Хотя это работает и достаточно легко понять, я могупредставьте себе, что есть более элегантный способ сделать этот расчет по сравнению с этим методом грубой силы.
Конечно, это не касается праздников, таких как Пасха и многие другие лунные даты.