📝
Pythonで祝日を調べる方法
jpholidayライブラリを使い祝日を調べる
- jpholidayでできること
- 指定日の祝日名を取得
- 指定日が祝日か判定
- 指定月と年の祝日を取得
- 指定範囲の祝日を取得
- 独自の休日を追加、削除
使い方
datetime
ライブラリを使うのでインポートを忘れずに
pip install jpholiday
指定日の祝日名を取得
-
is_holiday_name
メソッドを使います -
datetime.datetime
を引数にしても同じようにできます
import jpholiday
import datetime
print(jpholiday.is_holiday_name(datetime.date(2023, 3, 22)))
# 春分の日
print(jpholiday.is_holiday_name(datetime.date(2023, 3, 22)))
# None
指定日が祝日か判定
-
is_holiday
メソッドを使います - 祝日がある時
True
、ない時False
を返します -
datetime.datetime
を引数にしても同じようにできます
import jpholiday
import datetime
print(jpholiday.is_holiday(datetime.date(2023, 3, 21)))
# True
print(jpholiday.is_holiday(datetime.date(2023, 3, 22)))
# False
指定月と年の祝日を取得
指定の月の祝日を取得
-
month_holidays
メソッドを使います
import jpholiday
import datetime
print(jpholiday.month_holidays(2023, 3))
# [(datetime.date(2023, 3, 21), '春分の日')]
指定の年の祝日を取得
-
year_holidays
メソッドを使います
import jpholiday
import datetime
print(jpholiday.year_holidays(2023))
# [(datetime.date(2023, 1, 1), '元日'), (datetime.date(2023, 1, 2), '元日 振替休日'), (datetime.date(2023, 1, 9), '成人の日'), (datetime.date(2023, 2, 11), '建国記念の日'), (datetime.date(2023, 2, 23), '天皇誕生日'), (datetime.date(2023, 3, 21), '春分の日'), (datetime.date(2023, 4, 29), '昭和の日'), (datetime.date(2023, 5, 3), '憲法記念日'), (datetime.date(2023, 5, 4), 'みどりの日'), (datetime.date(2023, 5, 5), 'こどもの日'), (datetime.date(2023, 7, 17), '海の日'), (datetime.date(2023, 8, 11), '山の日'), (datetime.date(2023, 9, 18), '敬老の日'), (datetime.date(2023, 9, 23), '秋分の日'), (datetime.date(2023, 10, 9), 'スポーツの日'), (datetime.date(2023, 11, 3), '文化の日'), (datetime.date(2023, 11, 23), '勤労感謝の日')]
指定範囲の祝日を取得
-
between
メソッドを使います -
datetime.datetime
を引数にしても同じようにできます
import jpholiday
import datetime
print(jpholiday.between(datetime.date(2023, 3, 21), datetime.date(2023, 7, 31)))
# [(datetime.date(2023, 3, 21), '春分の日'), (datetime.date(2023, 4, 29), '昭和の日'), (datetime.date(2023, 5, 3), '憲法記念日'), (datetime.date(2023, 5, 4), 'みどりの日'), (datetime.date(2023, 5, 5), 'こどもの日'), (datetime.date(2023, 7, 17), '海の日')]
独自の休日を追加、削除
jpholiday.OriginalHoliday
を新しいクラスに継承し用意されている_is_holiday
と_is_holiday_name
を使います
休日追加
import jpholiday
import datetime
class MyHoliday(jpholiday.OriginalHoliday):
def _is_holiday(self, date):
if date == datetime.date(2023, 3, 22):
return True
return False
def _is_holiday_name(self, date):
return '休み'
print(jpholiday.is_holiday_name(datetime.date(2023, 3, 22)))
# 休み
print(jpholiday.is_holiday(datetime.date(2023, 3, 22)))
# True
休日削除
import jpholiday
import datetime
jpholiday.OriginalHoliday.unregister(MyHoliday)
応用
祝日、休日に色付きでターミナルに一覧で表示方法
colorama
を使い文字に色をつけます
pip install colorama
import jpholiday
import datetime
from colorama import Fore, init
init()
# 現在の年の取得
now_year = datetime.datetime.now().year
date = datetime.datetime(now_year, 1, 1, 0, 0)
WEEKDAY = ('月','火','水','木','金','土','日')
for i in range(365):
date_str = date.strftime(r"%Y-%m-%d")
holiday = jpholiday.is_holiday_name(date)
# 曜日の取得
week = WEEKDAY[date.weekday()]
# 文字に色をつける
if week == WEEKDAY[-1]:
week = Fore.RED + week
elif week == WEEKDAY[-2]:
week = Fore.BLUE + week
# 祝日なのか(jpholiday.is_holidayでも可)
if holiday is None:
print(f'{Fore.RESET + date_str} {week}曜日 ')
else:
print(f'{Fore.RESET + date_str} {Fore.RED + week}曜日 {holiday}')
date += datetime.timedelta(days=1)
else:
print(Fore.RESET) # 色のリセット
今日が祝日かどうか
import jpholiday
import datetime
date_now = datetime.datetime.now().date()
holiday = jpholiday.is_holiday(date_now)
if holiday:
holiday_name = jpholiday.is_holiday_name(date_now)
print(f"今日は{holiday_name}です。")
else:
print(f"今日は祝日ではありません。")
独自の休日を複数追加方法
休日追加の応用
import jpholiday
import datetime
class MyHoliday(jpholiday.OriginalHoliday):
df = {
'2023-03-22' : '休み1',
'2023-03-23' : '休み2',
}
def _is_holiday(self, date):
if date in [datetime.datetime.strptime(holiday, "%Y-%m-%d").date() for holiday in self.df.keys()]:
return True
else:
return False
def _is_holiday_name(self, date):
if date.strftime('%Y-%m-%d') in self.df.keys():
return self.df[date.strftime('%Y-%m-%d')]
else:
return None
print(jpholiday.is_holiday(datetime.date(2023, 3, 22)))
# True
print(jpholiday.is_holiday_name(datetime.date(2023, 3, 22)))
# 休み1
print(jpholiday.is_holiday_name(datetime.date(2023, 3, 23)))
# 休み2
ライブラリ
Discussion