Qual è il modo più semplice per determinare se una data è un giorno festivo negli Stati Uniti in Python? Sembra che ci siano vari calendari e webservices vacanze per vari paesi di quotazione, ma non ho trovato nulla di specifico per le banche negli Stati UnitiRilevamento di una festività negli Stati Uniti
risposta
Alcune osservazioni di carattere generale:
Non penso che @ AST4 davvero significa "giorno n-esimo della settimana ennesima di algoritmo del nono mese ". La nozione di "ennesima settimana all'ennesimo mese" è un rompicapo mentale (come il "calendario ISO"). Non ho mai visto una vacanza definita in termini di "ennesima settimana". Martin Luther King è un esempio del tipo "giorno della settimana Ennesimo nel mese" di vacanza:
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)
Gli Stati Uniti non dispone vacanze di Pasqua-correlati. Definizione non è difficile:
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)
L'idea 'base' può essere utilizzato per soddisfare il nuovo anno lunare, infatti ogni tipo di vacanza che è un offset da una data di base che ha bisogno di una procedura speciale per calcolarlo.
Le cosiddette vacanze "statici" non sono fissi quando la data "fisso" è un Sabato o Domenica e possono anche scomparire (senza giorno di assenza dal lavoro alternative):
# 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)
Sono sicuro che ci sono modi di specificare le festività che non sono soddisfatte dalle regole di cui sopra ... qualsiasi notizia di questo tipo è la benvenuta.
Cosa è questa classe di vacanze che stai usando? –
@Gringo Suave: È solo una notazione per mostrare la maggior parte dei modi strani che le vacanze possono essere definite. –
Assicurarsi data certa = uno di questi:!
Questi si applicano all'ambasciata degli Stati Uniti, ma possono variare a seconda della banca: ad esempio, la mia banca è aperta a Columbus Day, che non è una festa molto popolare in California. –
@Alex Martelli: la tua banca potrebbe essere aperta, ma l'alimentazione è chiusa, quindi la rete ACH non scorre su Columbus Day. È trattato come un sabato. –
I In realtà ha lavorato di recente su un problema molto simile a questo. Le festività statiche sono piuttosto banali da generare (ad es. Capodanno - 31 dicembre (ciclo di anni)). Ci sono algoritmi ben definiti là fuori per generare le vacanze fluttuanti. Essenzialmente hai una data di inizio (ad esempio, il 1 ° gennaio 1900) e lavori da lì. Ciò che ho finito per implementare è stato un ennesimo giorno dell'ennesimo algoritmo dell'undicesima settimana (ad esempio MLK day = 3rd Monday of January). La Pasqua è un po 'diversa da fare, ma ancora una volta ci sono algoritmi ben definiti per quello già là fuori (il Venerdì Santo è banale dopo aver gennaio).
C'è un libro abbastanza decente su questo là fuori si consiglia di controllare: Calendrical Calculations
Penso che tu intenda dire "Il venerdì santo è banale dopo che hai Pasqua", giusto? Detto questo, né il Venerdì Santo né il Lunedì di Pasqua sono normalmente festivi negli Stati Uniti, e la Pasqua è ovviamente sempre di domenica e quindi mai un giorno lavorativo comunque. –
Sì, scusa, stavo scrivendo troppo in fretta. – ast4
Alcuni chiarimenti (grazie a John Machin per indicarlo): Per n ° giorno intendo: lunedì = 1, martedì = 2, mercoledì = 3, giovedì = 4, venerdì = 5, sabato = 6, domenica = 7 – ast4
Il pacchetto Pandas fornisce una soluzione conveniente per questo:
from pandas.tseries.holiday import USFederalHolidayCalendar
cal = USFederalHolidayCalendar()
holidays = cal.holidays(start='2014-01-01', end='2014-12-31').to_pydatetime()
if datetime.datetime(2014,01,01) in holidays:
print True
@krosenvold: questo è il punto, questi giorni festivi in genere si estendono il fine settimana e la gente lo chiamano queste vacanze. Le vacanze più lunghe di una settimana rientrano nella categoria sabbatica. – mjv
Con quanto anticipo è necessario conoscerli? –
@krosenvold: È un vero peccato, ma non posso negarlo. –