59
43

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

datetimeとjpholidayを組み合わせて、平日か土日祝日かを判定するスクリプト

Last updated at Posted at 2019-04-06

仕事での反復作業の省力化するための自動化のスクリプトを書いている中で、「平日(営業日)」を判定するために作成したものです。
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初心者です。もっとよい方法や改善点・ご指摘があれば、ぜひ共有していただけると嬉しいです。
59
43
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
59
43

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?