安心・健康・痩せる方法

アンヘルシープログラマーの備忘録

Pythonで何年何月の何回目の何曜日を取る方法

具体的には 2019年1月の初回の月曜日を取得する方法で説明します。

例えば2019年1月のカレンダーはこんな感じ

    #         January 2019
    #     Su Mo Tu We Th Fr Sa
    #            1  2  3  4  5
    #      6  7  8  9 10 11 12
    #     13 14 15 16 17 18 19
    #     20 21 22 23 24 25 26
    #     27 28 29 30 31

なので2019年の第一月曜日は1/8日になるんだけど、pythonの標準モジュールのカレンダーで指定した月のカレンダーを使うと週毎に取るために週単位に取れるので12/31日(月)が最初の月曜日になってしまう。。。

import calendar
c = calendar.Calendar()


c.itermonthdates(2019, 1) 
# リストで帰ってくる
[
    datetime.date(2018, 12, 31), # Monday -> start week
    datetime.date(2019, 1, 1), # Tuesday
    datetime.date(2019, 1, 2), # Wednesday
    datetime.date(2019, 1, 3),
           ・・・
    datetime.date(2019, 2, 3),
]
import calendar
c = calendar.Calendar()

mondey = 0
index = 0

# d.weekday(): 曜日の情報が0(Monday)〜6(Sunday)で取れる

[d for d in c.itermonthdates(2019, 1) if d.weekday() == mondey and d.month == month][index]

って書くと2019年1月7日が取れるよ!

カレンダーモジュールってあまり見かけないけど割と便利なので必要に応じて使っていきたいなって思った。

カレンダーのドキュメント見ると結構色々なことが出来るみたいなので、頑張って処理を書かずにライブラリにどんどん助けてもらおう

docs.python.org