检测美国假期

时间:2010-03-06 21:55:32

标签: python date bank

确定日期是否是美国银行假日的最简单方法是什么?似乎有各种日历和网络服务列出了各个国家的假期,但我没有找到任何针对美国银行的具体信息

5 个答案:

答案 0 :(得分:22)

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 

答案 1 :(得分:6)

一些一般性意见:

我不认为@ ast4真的意味着“第n个月第n周算法的第n天”。 “第n个月第n周”的概念是精神攫取(就像“ISO日历”)。我从未见过按照“第n周”定义的假期。马丁·路德·金纪念日是“按月计算的第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)

我确信有一些方法可以指定上述规则未提供的假期......欢迎任何此类新闻。

答案 2 :(得分:5)

使用python中的假日库。

  

pip安装假期

在美国度假:

1。要检查是否有约会假期。

from datetime import date
import holidays

# Select country
us_holidays = holidays.US()

# If it is a holidays then it returns True else False
print('01-01-2018' in us_holidays)
print('02-01-2018' in us_holidays)

# What holidays is it?
print(us_holidays.get('01-01-2018'))
print(us_holidays.get('02-01-2018'))

2。列出美国的所有假期:

from datetime import date
import holidays

# Select country
us_holidays = holidays.US()

# Print all the holidays in US in year 2018
for ptr in holidays.US(years = 2018).items():
    print(ptr)

您可以在自己的博客中找到喜欢的任何国家/地区的假期。 My Blog on Holidays

Github Link of Holidays Python

答案 3 :(得分:3)

确保日期!=其中之一:

http://www.buyusa.gov/uk/en/us_bank_holidays.html

答案 4 :(得分:2)

我最近在一个像这个问题很像的问题上工作过。静态假期相当微不足道(例如,新年前夜 - 12月31日,(循环到年))。有明确定义的算法来产生浮动假期。基本上你有一个开始日期(例如1900年1月1日)并从那里开始工作。我最终实现的是第n个月第n周算法的第n天(例如MLK日= 1月的第3个星期一)。复活节有点不同,但是那里已经有明确定义的算法(在你有一月之后,耶稣受难日是微不足道的)。

有一本相当不错的书,你可能想看看:Calendrical Calculations