2010-03-06 59 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