【Python】日付の操作まとめ

CODE,Python

Pythonで月末日や休日判定などに用いる日付処理です。

記載内容 ①先月末日を取得する(datetime)
②先月末日を取得する(calendar)
③先月同日、翌月同日を取得する
④平日か休日かを判定する

①先月末日を取得する(datetime)

  • 今日の年月日から今日の日付を引くことで先月の末日を求めます
  • strftime() は日付、時間を文字列へ変換する関数です
import datetime

today = datetime.datetime.today()
last_month = today - datetime.timedelta(days=today.day)

print(today)
print(last_month.strftime('%Y%m%d'))

【実行結果】

2020-12-20 14:50:04.505901
20201130         

②先月末日を取得する(calendar)

  • calendar関数を使用して先月末日を取得します
  • calendar.monthrange(year, month) は年・月を引数として、その月初の曜日と日数を返す関数
  • ここでは日数しか必要ないので[1]を指定して変数daysに格納しています
import datetime

today = datetime.datetime.today()
last_month = today - datetime.timedelta(days=today.day)

print(today)
print(last_month.strftime('%Y%m%d'))

【実行結果】

2020-11-30

③先月同日、翌月同日を取得する

  • relativedelta を使用すると先月と翌日の日付が容易に求められます
import datetime
from dateutil import relativedelta

today = datetime.datetime.today()
last_month = today - relativedelta.relativedelta(months=1)
next_month = today + relativedelta.relativedelta(months=1)

print(today)
print(last_month)
print(next_month)

【実行結果】

2020-12-20 15:01:51.746379
2020-11-20 15:01:51.746379
2021-01-20 15:01:51.746379

④平日か休日かを判定する

  • weekday() は月曜~日曜を0~6で返す関数です
  • 返ってくる数字を調べて平日か休日かを判定します
  • strptime() は文字列から日付、時間へ変換する関数です
from datetime import date
import datetime

def check_date(input_ymd):
    check_date = datetime.datetime.strptime(input_ymd, '%Y%m%d')

    yy = int(check_date.strftime('%Y'))
    mm = int(check_date.strftime('%m'))
    dd = int(check_date.strftime('%d'))

    if date(yy, mm, dd).weekday() < 5:
        date_result = '平日'
    else:
        date_result = '休日'

    return date_result

# --------------------
# メイン処理
# --------------------
input_ymd = '20201220'
print(check_date(input_ymd))

【実行結果】

休日

参考書

この本は所々に書き込む余白があるので「自分の本」が育ちます。

CODE,Python

Posted by junichi