今回のお題
今回はjpholiday
というライブラリを用いてpythonで祝日の情報を扱う方法について取り上げます。
目次
- jpholidayでできること
- 導入方法
- 利用例1〜祝日かどうかの判定
- 利用例2〜祝日名の取得
- 利用例3〜祝日の一覧取得
jpholidayでできること
jpholidayでできることは以下の通りです。
- 祝日かどうかの判定
- 引数として与えた日付が祝日かどうかを判定します。
- 祝日名の取得
- 引数として与えた日付の祝日名を返します。
- 振替休日であれば"xxxの日 振替休日"という表記になります。
- また、祝日でない場合には"None"が返されます。
- 祝日の一覧取得
- 一定期間内の祝日を一覧取得します
- 期間の指定方法に関しては、年単位・月単位・日付指定それぞれのメソッドが用意されています。
- 独自の祝日の追加・削除
- 独自の祝日を追加したり削除したりすることも可能です。
今回は独自の祝日の追加・削除
については取り上げません。
他の3つについてみていきます。
導入方法
% pip3 install jpholiday
# importが必要
import jpholiday
祝日かどうかの判定
is_holiday
メソッドを用いて祝日かどうかを判定します。
import jpholiday
import datetime
print(jpholiday.is_holiday(datetime.date(2021, 1, 1))
# >>true
print(jpholiday.is_holiday(datetime(2021, 4, 2))
# >>false
祝日名の取得
is_holiday_name
メソッドを用いて祝日名を取得します。
import jpholiday
import datetime
print(jpholiday.is_holiday_name(datetime.date(2021, 1, 1))
# >>元旦
print(jpholiday.is_holiday_name(datetime.date(2018, 2, 12))
# >>建国記念日 振替休日
print(jpholiday.is_holiday_name(datetime.date(2021, 4, 2))
# >>None
# 祝日でない場合には"None"表記
祝日の一覧取得
指定した期間の祝日を一覧取得可能。
期間の指定には、year_holidays
, month_holidays
, between
のいずれかを用いる。
# 年間の祝日を取得
print(jpholiday.year_holidays(2018))
>>[(datetime.date(2018, 1, 1), '元日'), (datetime.date(2018, 1, 8), '成人の日'), (datetime.date(2018, 2, 11), '建国記念の日'), (datetime.date(2018, 2, 12), '建国記念の日 振替休日'), (datetime.date(2018, 3, 21), '春分の日'), (datetime.date(2018, 4, 29), '昭和の日'), (datetime.date(2018, 4, 30), '昭和の日 振替休日'), (datetime.date(2018, 5, 3), '憲法記念日'), (datetime.date(2018, 5, 4), 'みどりの日'), (datetime.date(2018, 5, 5), 'こどもの日'), (datetime.date(2018, 7, 16), '海の日'), (datetime.date(2018, 8, 11), '山の日'), (datetime.date(2018, 9, 17), '敬老の日'), (datetime.date(2018, 9, 23), '秋分の日'), (datetime.date(2018, 9, 24), '秋分の日 振替休日'), (datetime.date(2018, 10, 8), '体育の日'), (datetime.date(2018, 11, 3), '文化の日'), (datetime.date(2018, 11, 23), '勤労感謝の日'), (datetime.date(2018, 12, 23), '天皇誕生日'), (datetime.date(2018, 12, 24), '天皇誕生日 振替休日')]
# 月間の祝日を取得
print(jpholiday.month_holidays(2021, 3))
# 期間指定
print(jpholiday.between(datetime.date(2021,1,1), datetime(2021, 3, 19)))
戻り値はリスト形式で、さらに一つ一つの要素を見ると(datetime.date型オブジェクト, 祝日名)
のタプルになっています。
このことを利用してforループで個別出力することも可能。
for holiday in jpholiday.between(datetime.date(2021, 1, 1), datetime.date(2021, 3, 31))):
print(f'{holiday[0].year}年{holiday[0].month}月{holiday[0].day}日は{holiday[1]}です。')
# >>2021年1月1日は元日です。
# >>2021年1月11日は成人の日です。
# >>2021年2月11日は建国記念の日です。
# >>2021年2月23日は天皇誕生日です。
# >>2021年3月20日は春分の日です。
以上です。