2009-12-31 88 views
9

我正在尋找一種方法來確定給定的日期是否爲假期,假定日曆。假日日曆,文件格式等

具體而言,您可能會說is_holiday (datetime.date, "USA"),它會回答給定日期是否爲名爲「USA」的日曆的假期。

我承認沒有微不足道的所有年份的所有節假日都這樣做。例如,聖誕節總是在12月25日,爲了聯邦政府的目的,有時候我們慶祝(即它不是營業日)在12月24日,有時在26日。相似,猶太節日(例如)每年遷移(相對於格里曆)。

我不想爲每個假期計算。我想知道更多是否有一些接受的標準文件格式按年列出節假日,如果有的話,是否有任何模塊 - 特別是在Python中,但我很靈活 - 理解如何讀取這種格式。同樣,文件格式將定義週末 - 通常是週六和週日,但在某些地區可能是週五和週六等。

回答

6

Mozilla擁有一組以.ics格式的user-contributed holiday files。這可能會讓你開始。不幸的是,他們走出了不同的日期範圍。 iCalShare也有.ics格式的假日日曆。

注:

有些節日是stateregion-related,而不是country-related

我在過去發現分層方法的工作原理。例如檢查城市假期日曆,然後一個國家日曆,然後一個國家日曆。

有一個用於讀取.ics文件的Python模塊,名爲icalendar(也位於pypi)。不幸的是,我無法保證它的質量。

+0

在我簡單的例子同意有關國家/地區相關...「USA」不是國家名稱,它只是「日曆」的名稱。可以很容易地'is_holiday(datetime.date,「Hello World」)' – FreeMemory 2009-12-31 17:43:23

+0

我想的很多。我過去必須做的是實施一個「回退」策略,因此我的日曆內置了層次結構的概念。例如我的紐約市日曆知道它的「父母」是美國日曆等。 – 2009-12-31 17:51:39

2

經典holiday.py模塊(舊dateutil包的一部分 - 老得足以依靠模塊time,而不是比較近datetime)確實曆法計算(包括猶太< - >公曆翻譯)的一個很好的工作,但不涉及持久性(閱讀或寫作)。

正如@布賴恩的迴應所暗示的,ics是文件中「日曆」的主要格式(並且還有假日文件等格式)。要使用Python讀取和寫入ics文件,可以使用例如iCalendar包完成該任務,或者使用vobject,該包是支持vCard和vCalendar格式(包括iCalendar)範圍的更廣泛的包。

0

閱讀曆法計算:http://emr.cs.uiuc.edu/home/reingold/calendar-book/index.shtml

美國假期的各種規則進行了詳細規定,與算法。

「慶祝」業務(將聖誕節假期移至第24天是因爲第25天將在週六舉行)對於查看美國聯邦節假日名單是一件簡單的事情。

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

個別國家有所不同,當然,因爲這樣做的企業。但這是一個開始。

+0

但是我沒有興趣計算假期。不同的地區,不同的宗教和不同的規則使這是一項非常艱鉅的任務。我很高興能夠存儲多個不同的文件,每個文件都代表不同的「日曆」。 我正在尋找更多的文件規範,將不會發明我自己的。 .ics是一個開始,但似乎是__too很多,因爲它也用於「事件」等。 – FreeMemory 2009-12-31 18:34:54

+1

@FreeMemory:「我正在尋找更多的文件規範」。好。更新你的問題,實際上非常非常清楚地說出來。 – 2009-12-31 18:49:40

+1

@S。洛特:也許讀過最後一段? 「我不想爲每個假期計算,我想知道更多是否有一些接受的__標準文件格式___按年份列出節假日」(強調增加)。 – FreeMemory 2009-12-31 18:51:10