月初日や、とある曜日の日付を取得したいといった場面があり、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)
*所感
引数のdays
やday
といった似た値が間違えやすそうなので、テストをして動作確認してから使いたいと思います。isocalendar
で対象が何週目なのか調べて、relativedelta
で欲しい曜日を取得するといった使い方が良いのではないかと思いました。必要な場面でうまく使えるよう、覚えておこうと思います。