30

Pythonで日付が米国の祝日かどうかを判断する最も簡単な方法は何ですか? さまざまな国の祝日を一覧表示するさまざまなカレンダーや Web サービスがあるようですが、米国の銀行に固有のものは見つかりませんでした。

4

6 に答える 6

40

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 
于 2014-07-09T04:58:57.787 に答える
18

Python で Holiday ライブラリを使用します。

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)

私のブログに掲載されている国のリストから、好きな国の休日を見つけることができます。 休日のブログ

ホリデー Python の Github リンク

于 2018-07-22T18:56:53.373 に答える
7

一般的なコメント:

@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)

上記のルールに当てはまらない祝日を指定する方法もあると思いますが、そのようなニュースは歓迎します。

于 2010-03-07T00:23:39.510 に答える
3

date != 次のいずれかを確認してください。

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

于 2010-03-06T21:58:44.673 に答える
2

私は実際に最近、この問題によく似た問題に取り組んできました。静的な休日を生成するのはかなり簡単です (例: 大晦日 - 12 月 31 日 (年ごとのサイクル))。変動休日を生成するための明確に定義されたアルゴリズムがあります。基本的に、開始日 (1900 年 1 月 1 日など) があり、そこから作業を開始します。私が最終的に実装したのは、n 番目の月のアルゴリズムの n 番目の週の n 番目の日 (たとえば、MLK 日 = 1 月の第 3 月曜日) でした。イースターの場合は少し異なりますが、これについても明確に定義されたアルゴリズムが既に存在します (1 月が過ぎた後の聖金曜日は些細なことです)。

これについてはかなりまともな本がありますので、チェックしてみてください: Calendrical Calculations

于 2010-03-06T22:12:55.920 に答える