仕事での反復作業の省力化するための自動化のスクリプトを書いている中で、「平日(営業日)」を判定するために作成したものです。
google検索してもヒットが少なかったので、自分のための備忘録も兼ねて、投稿することにしました。
使用するパッケージ
- datetime
- jpholiday
コード
パッケージのインストール
import datetime
import jpholiday
平日か土日祝日かを判定する
指定した日が平日なら1、土日祝日なら0を返す関数は、下記で実装できます。
DATE = "yyyymmdd" # 日付は8桁文字列の形式
def isBizDay(DATE):
Date = datetime.date(int(DATE[0:4]), int(DATE[4:6]), int(DATE[6:8]))
if Date.weekday() >= 5 or jpholiday.is_holiday(Date):
return 0
else:
return 1
ちなみに、datetimeモジュールのdate.weekdayメソッドを使うと、曜日ごとに指定された数字(0が月曜日、6が日曜日)が取得できます。
私の職場は平日=出勤日=営業日なので、date.weekday()が5か6、又は祝日の場合には0を返すという条件にしました。
if文をアレンジするといろんな条件に対応できるので、よければ試してみてください。
指定した日以降の直近の平日を文字列(yyyymmdd)で返す
今回は、指定日以降の直近の平日を返したかったので、下記の関数を作成しました。
DATE = "yyyymmdd" # 日付は8桁文字列の形式
def returnBizDay(DATE):
Date = datetime.date(int(DATE[0:4]), int(DATE[4:6]), int(DATE[6:8]))
while Date.weekday() >= 5 or jpholiday.is_holiday(Date):
Date = datetime.date(Date.year, Date.month, Date.day + 1)
return Date.strftime("%Y%m%d")
指定日が土日祝日の場合に、Date.day + 1で指定日を翌日に上書きし、指定日が平日になるまでループさせています。
まとめ
- datetimeパッケージとjpholidayパッケージを組み合わせることで、容易に、祝日も含めた日付の制御ができます。
- jpholidayについてはこちらのリンクを参照ください。
- python初心者です。もっとよい方法や改善点・ご指摘があれば、ぜひ共有していただけると嬉しいです。