Обнаружение американского праздника

Что состоит в том, чтобы определить самый простой путь, является ли дата американским выходным днем в Python? Кажется, существуют различные календари и веб-сервисы, перечисляющие праздники для различных стран, но я ничто не нашел характерным для банков в США.

23
задан Cerin 6 March 2010 в 21:55
поделиться

3 ответа

Некоторые общие комментарии:

Я не думаю, что @ ast4 на самом деле означает «n-й день n-й недели алгоритма n-го месяца». Понятие «n-я неделя в n-м месяце» бросается в глаза (как и «календарь ISO»). Я никогда не видел, чтобы праздник определялся как «энная неделя». День Мартина Лютера Кинга является примером праздника типа «N-й день недели в месяце»:

MONDAY, ...., SATURDAY = range(7)
JAN, ....., DEC = range(1, 12)

Holiday("Martin L King's 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's 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)

Я уверен, что есть способы указать праздники которые не обслуживаются вышеуказанными правилами ... любые такие новости приветствуются.

6
ответ дан 29 November 2019 в 01:55
поделиться

Убедитесь, что дата != одному из этих:

http://www.buyusa.gov/uk/en/us_bank_holidays.html

3
ответ дан 29 November 2019 в 01:55
поделиться

Я действительно недавно работал над проблемой, очень похожей на эту. Статические праздники довольно просто создать (например, канун Нового года - 31 декабря (цикл по годам)). Существуют четко определенные алгоритмы для создания плавающих праздников. По сути, у вас есть дата начала (например, 1 января 1900 года) и вы начинаете работать с нее. В итоге я реализовал алгоритм n-го дня n-й недели n-го месяца (например, день MLK = 3-й понедельник января).Пасха - это немного другое дело, но, опять же, для этого уже есть четко определенные алгоритмы (Страстная пятница тривиальна после января).

Есть довольно приличная книга по этому поводу, которую вы, возможно, захотите почитать: Календарные вычисления

2
ответ дан 29 November 2019 в 01:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: