2010-03-06 48 views
13

如何確定日期是否爲Python中的美國銀行假期,最簡單的方法是什麼?似乎有各種日曆和Web服務,列出各國的假期,但我還沒有找到具體到銀行的任何美國檢測美國假期

+0

@krosenvold:這就是問題所在,這些節假日通常延長週末,人們稱這些假期。長達一週以上的假期屬於休假類別。 – mjv 2010-03-06 22:05:35

+1

您需要提前多久才能瞭解它們? – 2010-03-06 22:09:10

+0

@krosenvold:這是一個該死的恥辱,但我不能否認它。 – 2010-03-06 22:17:03

回答

5

一些一般性的評論:

我不認爲@ AST4真正的意思是「第N周的第n天nth月份算法「。 「第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) 

我敢肯定有是指定不符合上述規則的假期的方式......任何此類消息都是受歡迎的。

+1

什麼你正在使用這個假期課程嗎? – 2011-06-26 19:06:36

+0

@Gringo Suave:這只是一個表示假日可以被定義的大部分奇怪方式的符號。 – 2011-06-26 21:38:03

3
+0

這些適用於美國大使館,但對於任何特定的銀行可能會有所不同:例如,我的銀行在哥倫布日開放,這在加利福尼亞州並不是一個非常受歡迎的節日。 – 2010-03-06 23:32:59

+0

@Alex Martelli:您的銀行可能會開放,但美聯儲已關閉,因此ACH網絡不會在哥倫布日進行迭代。它像星期六一樣對待。 – 2011-10-04 20:43:10

2

我實際上最近我們在一個很像這個問題的問題上工作。靜態假期生成相當微不足道(例如新年前夕 - 12月31日,(循環到年份))。有明確的算法來生成浮動假期。基本上你有一個開始日期(例如1900年1月1日)並從那裏開始工作。我最終實施的是第n個月算法的第n個星期的第n天(例如MLK日= 1月的第3個星期一)。復活節與做的有點不同,但是對於已經存在的復活節算法也有明確的算法(在1月份之後,星期五是微不足道的)。

有一個相當不錯的書裏關於這一點,你可能想看看:Calendrical Calculations

+0

我想你的意思是說,「復活節後,耶穌受難日並不重要」,對嗎? 這就是說,無論是耶穌受難節還是復活節星期一,在美國通常都不是假期,復活節當然總是在星期天,因此從來不是工作日。 – 2010-03-06 22:16:12

+0

對不起,我輸入得太快了。 – ast4 2010-03-06 22:18:09

+0

一些解釋(感謝John Machin指出): 到第n天我的意思是:星期一= 1,星期二= 2,星期三= 3,星期四= 4,星期五= 5,星期六= 6,星期日= 7 – ast4 2010-03-07 01:52:48

11

Pandas包提供了一個方便的解決方案是:

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