2009-12-31 5 views
9

Ich bin auf der Suche nach einem Weg, um herauszufinden, ob ein bestimmtes Datum ein "Urlaub" ist, mit einem bestimmten Feiertagskalender.Urlaubskalender, Dateiformate, etc.

Konkret könnte man sagen is_holiday (datetime.date, "USA"), die beantworten würde, ob das angegebene Datum ein Feiertag für den Kalender namens "USA" ist.

Ich erkenne, dass es keine trivialen Weg dies für alle Ferien für alle Jahre tun. Zum Beispiel, während Weihnachten ist immer der 25. Dezember, für Zwecke der Bundesregierung, manchmal wir feiern (d. H. Es ist kein Werktag) am 24. Dezember und manchmal am 26. Dezember. Ähnliche, jüdische Feiertage (zum Beispiel) wandern jährlich ab (relativ zum Gregorianischen Kalender).

Ich bin nicht auf der Suche nach Berechnungen für jeden Urlaub. Ich frage mich mehr, ob es ein akzeptiertes Standard-Dateiformat gibt, das Feiertage nach Jahren auflistet, und wenn ja, wenn es Module gibt - speziell in Python, aber ich bin flexibel -, die verstehen, wie man dieses Format liest. Ebenso würde das Dateiformat Wochenenden definieren - normalerweise Samstag und Sonntag, aber in bestimmten Regionen auch Freitag und Samstag usw.

Antwort

6

Mozilla hat eine Reihe von user-contributed holiday files im .ics-Format. Das könnte dich beginnen. Leider gehen sie in verschiedene Zeiträume. iCalShare hat auch Urlaubskalender in .ics Format.

Hinweis:

Einige Feiertage sind state oder region-related, anstatt country-related.

Ich habe in der Vergangenheit gefunden, dass ein hierarchischer Ansatz funktioniert. z.B. Überprüfen Sie für eine Stadt Urlaub Kalender, dann einen staatlichen Kalender, dann ein Land Kalender.

Es gibt ein Python-Modul zum Lesen von .ics-Dateien namens icalendar (auch unter pypi). Ich kann leider nicht für seine Qualität bürgen.

+0

Vereinbarte über den Zustand/regionsbezogenen ... „USA“ in meinem trivialen Beispiel war nicht das Land -name, es war nur der Name des "Kalenders". Genauso leicht hätte ich 'is_holiday (datetime.date," Hello World ")" – FreeMemory

+0

"sagen können. In der Vergangenheit musste ich eine "Fallback" -Strategie implementieren, und folglich ist in meinen Kalendern das Konzept einer Hierarchie eingebaut. z.B. Mein NYC-Kalender weiß, dass sein "Elternteil" der USA-Kalender etc. ist. –

2

Das klassische holiday.py Modul (Teil eines alten dateutil Paket - alt genug, um auf Modul time statt der relativ neue datetime verlassen) hat eine gute Arbeit von kalendarischen Berechnungen (einschließlich jüdischen < -> gregorianischen Kalender Übersetzungen), aber beschäftigt sich nicht mit Persistenz (Lesen oder Schreiben).

Wie @ Brians Antwort schlägt vor, ics ist das dominante Format für "Kalender" in einer Datei (und es gibt Urlaub Dateien, unter anderem in einem solchen Format). Zum Lesen und Schreiben der ics-Datei in Python können Sie zum Beispiel das Paket iCalendar verwenden, das genau diese Aufgabe erledigt, oder vobject, das ein viel breiteres Paket ist, das den Bereich der vCard- und vCalendar-Formate (einschließlich iCalendar) unterstützt.

0

lesen Kalenderberechnungen: http://emr.cs.uiuc.edu/home/reingold/calendar-book/index.shtml

Die verschiedenen Regeln für die US-Feiertage sind in Angaben gemacht, mit Algorithmen.

Das "Celebrate" -Geschäft (Umzug des Weihnachtsfeiertags auf den 24., weil der 25. auf einen Samstag fällt) ist eine einfache Angelegenheit, die US-Federal-liste zu überprüfen.

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

Einzelne Staaten variieren, natürlich, wie Unternehmen tun. Aber das ist ein Anfang.

+0

Ich bin __nicht__ daran interessiert, die Feiertage zu berechnen, jedoch. Verschiedene Regionen, verschiedene Religionen und unterschiedliche Regeln machen dies zu einer sehr schwierigen Aufgabe. Ich würde mich freuen, mehrere verschiedene Dateien zu speichern, von denen jede einen anderen "Kalender" darstellt. Ich suchte mehr nach einer Dateispezifikation, die funktionieren würde, ohne mein eigenes zu erfinden. .ics ist ein Anfang, scheint aber __too viel__ zu sein, da es auch für "Ereignisse" usw. verwendet wird. – FreeMemory

+1

@FreeMemory: "Ich habe mehr nach einer Dateispezifikation gesucht". Gut. Aktualisieren Sie Ihre Frage, um das wirklich sehr, sehr deutlich zu sagen. –

+1

@S. Lott: Vielleicht den letzten Absatz gelesen? "Ich suche nicht nach Berechnungen für jeden Urlaub. Ich frage mich mehr, ob es ein akzeptiertes __Standard-Dateiformat__ gibt, das Feiertage nach Jahr auflistet" (Hervorhebung hinzugefügt). – FreeMemory