2009-12-31 13 views
9

Sto cercando un modo per capire se una determinata data è una "vacanza", dato un calendario delle festività.Calendari festivi, formati di file, e altri

In particolare, si potrebbe dire is_holiday (datetime.date, "USA") che risponderebbe se la data specificata è una festività per il calendario denominato "USA".

Riconosco che non esiste il banale modo di farlo per tutte le vacanze per tutti gli anni. Ad esempio, mentre il Natale è sempre il 25 dicembre, a scopi di governo federale, a volte lo festeggiamo il (vale a dire, non è un giorno lavorativo) il 24 dicembre, e talvolta il 26. Le festività ebraiche similari (ad esempio) migrano ogni anno (rispetto al calendario gregoriano).

Non sto cercando i calcoli per ogni vacanza. Mi chiedo di più se esiste un formato di file standard accettato che elenca le festività per anno, e se è così, se ci sono dei moduli - in Python, in particolare, ma sono flessibile - capiscono come leggere il suddetto formato. Allo stesso modo, il formato del file definirà i fine settimana, normalmente sabato e domenica, ma in alcune regioni potrebbe essere venerdì e sabato, ecc.

risposta

6

Mozilla ha un set di user-contributed holiday files in formato .ics. Questo potrebbe farti iniziare. Sfortunatamente escono in intervalli di date differenti. iCalShare ha anche calendari per le festività nel formato .ics.

Nota:

Alcuni vacanze sono state o region-related, piuttosto che country-related.

Ho trovato in passato che un approccio gerarchico funziona. per esempio. controllare per un calendario di vacanza della città, quindi un calendario di stato, quindi un calendario paese.

C'è un modulo Python per leggere i file .ics chiamati icalendar (anche su pypi). Sfortunatamente non posso garantire la sua qualità.

+0

D'accordo sullo stato/regioni connesse ... "USA" nel mio esempio banale non era il paese -name, era solo il nome del "calendario". Avrei potuto facilmente essere 'is_holiday (datetime.date," Hello World ")' – FreeMemory

+0

Ho pensato tanto. Quello che ho dovuto fare in passato è implementare una strategia di "fall-back" e di conseguenza i miei calendari hanno un concetto di gerarchia incorporata in essi. per esempio. il mio calendario di New York sa che il suo 'genitore' è il calendario USA ecc. –

2

Il classico holiday.py modulo (parte di un vecchio pacchetto dateutil - abbastanza vecchio per fare affidamento su modulo time piuttosto che il relativamente recente datetime) fa un buon lavoro di calcoli calendric (tra cui ebrei < - traduzioni> Calendario Gregoriano), ma non si occupa della persistenza (lettura o scrittura).

Come suggerisce la risposta di @ Brian, ics è il formato dominante per "calendari" in un file (e ci sono file di festività, tra gli altri, in tale formato). Per leggere e scrivere il file ics in Python è possibile ad esempio utilizzare il pacchetto iCalendar, che fa esattamente questo compito, o vobject, che è un pacchetto molto più ampio che supporta la gamma di formati vCard e vCalendar (incluso iCalendar).

0

Leggi Calendrical Calcoli: http://emr.cs.uiuc.edu/home/reingold/calendar-book/index.shtml

le varie regole per le vacanze degli Stati Uniti sono forniti in dettaglio, con algoritmi.

Il business "festeggia" (spostando le festività natalizie al 24 perché il 25 cade di sabato) è una semplice questione di controllare la lista delle festività federali degli Stati Uniti.

http://www.opm.gov/Operating_Status_Schedules/fedhol/2009.asp

stati individuali variano, naturalmente, come fanno le imprese. Ma questo è un inizio.

+0

Non sono __not__ interessato a calcolare le vacanze, comunque. Regioni diverse, religioni diverse e regole diverse rendono questo compito molto difficile. Sarei felice di memorizzare più file diversi, ognuno per rappresentare un diverso "calendario". Stavo cercando altre specifiche di file che funzionassero senza inventare le mie. .ics è un inizio, ma sembra essere __too much__, in quanto è utilizzato anche per "eventi", ecc. – FreeMemory

+1

@FreeMemory: "Cercavo più per alcune specifiche di file". Buona. Aggiorna la tua domanda per dirlo veramente, molto chiaramente. –

+1

@S. Lott: Forse leggi l'ultimo paragrafo? "Non sto cercando calcoli per ogni vacanza, mi chiedo di più se esiste un formato di file standard __standard accettato che elenchi le vacanze per anno" (enfasi aggiunta). – FreeMemory

Problemi correlati