Ответ 1
Некоторые общие комментарии:
Я не думаю, что @ast4 действительно означает "n-й день n-й недели алгоритма n-го месяца". Понятие "n-я неделя в n-м месяце" - это умение (например, "календарь ISO" ). Я никогда не видел праздника, определенного с точки зрения "n-й недели". День Мартина Лютера Кинга - пример праздника "Nth weekday in month":
MONDAY, ...., SATURDAY = range(7)
JAN, ....., DEC = range(1, 12)
Holiday("Martin L King Birthday", type='floating',
ordinal=3, weekday=MON, month=JAN)
Holiday("Memorial Day", type='floating',
ordinal=-1, weekday=MON, month=MAY)
В США нет праздников, связанных с Пасхой. Определение не сложно:
Holiday("Good Friday", type='moveable',
base='gregorian_easter', delta_days=-2)
Holiday("Easter Monday", etc, delta_days=1)
# Some states in Australia used to have Easter Tuesday (no kidding)
Holiday("Easter Tuesday", etc, delta_days=2)
Идею "базы" можно использовать для удовлетворения лунного нового года, фактически любого праздника, который является смещением от базовой даты, для которой требуется специальная процедура для ее расчета.
Так называемые "статические" праздники не фиксируются, когда "фиксированная" дата - суббота или воскресенье и может даже исчезнуть (нет альтернативного выходного дня):
# Americans will get a day off on Friday 31 Dec 2010
# because 1 Jan 2011 is a Saturday.
Holiday("New Year Day", type='fixed',
day=1, month=JAN, sat_adj=-1, sun_adj=????)
# Australia observes ANZAC Day on the day, with no day off
# if the fixed date falls on a weekend.
Holiday("ANZAC Day", type='fixed', day=25, month=APR, sat_adj=0, sun_adj=0)
# Two consecutive "fixed" holidays is OK; three would need re-thinking.
# Australia again:
Holiday("Christmas Day", type='fixed', day=25, month=DEC, sat_adj=2, sun_adj=1)
Holiday("Boxing Day", type='fixed', day=26, month=DEC, sat_adj=2, sun_adj=2)
Я уверен, что есть способы указать праздники, на которые не распространяются приведенные выше правила... любые такие новости приветствуются.