Python での日付操作




月初日や、とある曜日の日付を取得したいといった場面があり、Pythonでの日付操作について調べたのでまとめておきます。


*参考



*relativedelta

Python の dateutil の拡張ライブラリです。
引数を渡すことで、様々な日付の操作をすることができます。

<インストール>
$ pip install python-dateutil

<使い方>
# coding=utf-8

from datetime import date
from dateutil.relativedelta import relativedelta

# 対象の日付 (2018/9/30)
target_date = date(2018, 9, 30)

# 1週間前 (2018/9/23)
last_week_date = target_date - relativedelta(weeks=1)

# 今週の月曜日 (2018-09-24)
first_date_this_week = target_date - relativedelta(days=target_date.weekday())

# 今週の日曜日 (2018-09-30)
end_date_this_week = target_date + relativedelta(weekday=6)

# 先週の月曜日 (2018-09-17)
last_monday = target_date - relativedelta(weeks=1, days=target_date.weekday())

# 月初 (2018-09-01)
first_date_this_month = target_date + relativedelta(day=1)

# 月末 (2018-09-30)
last_date_this_month = target_date + relativedelta(day=1, months=1, days=-1)


*isocalendar

対象の日が、1年で何週目なのかを確認することができます。
from datetime import date

target_date = date(2018, 9, 30)
print(target_date.isocalendar())

<実行結果>
# 年, 週番号, 曜日
(2018, 39, 7)


*所感

引数のdaysdayといった似た値が間違えやすそうなので、テストをして動作確認してから使いたいと思います。
isocalendarで対象が何週目なのか調べて、relativedeltaで欲しい曜日を取得するといった使い方が良いのではないかと思いました。
必要な場面でうまく使えるよう、覚えておこうと思います。