概要
「今日は第3火曜日です」とか「今日は第1金曜日です」ってのを知りたかったんだけど、調べる方法がなさそうだったので実装した。
(もしかしてもっとちゃんと調べるとあるんですかね、僕は見つけられませんでした・・・)
AWS Lambdaでいろいろやっていたときに使いたかったものなので、言語はPython3.6。
別にどの言語でも関係ないような処理だけど・・・。
説明が下手だったり変数名がイマイチな部分は、大変申し訳ないです。
解説
その曜日がその月に何回出現したかを数えれば、今日が第何回目の何曜日かわかるんじゃない?と思った。
今日の日付データ取得し、それを基準にして1週間前の日付が同月かどうか調べる。
今日を含め、日付が1日以降であれば出現回数+1していくようなループで調べられるかなあ、と思った。
コード
import datetime
def get_weekday():
#日本時間での現在の日付データ取得
#念のためUTCの時間を取得してから時差分を足してる
jstTime = datetime.datetime.utcnow() + datetime.timedelta(hours=9)
day = jstTime.day
#曜日を漢字で取得したかった
#.weekday()ではint型の数が取得でき、0が月曜日で6が日曜日なのでリストと組み合わせた
wd = ["月","火","水","木","金","土","日"]
weekday = wd[jstTime.weekday()]
#1週間前の日付が同月かどうか調べる -> 1日より前か後かで判別
#dayが1日以降(同月)なら出現回数+1してdayに1週間前の日付を代入(-7する)、1日より前(前の月の日付)なら処理終了
weeks = 0
while day > 0:
weeks += 1
day -= 7
"""
例:今日が2017/11/13の場合、day = 13
1ループ目・・・ day(=13) > 0 なので出現回数+1(weeks += 1)、1週間前の日付代入(day -= 7)
2ループ目・・・ day(=6) > 0 なので出現回数+1(weeks += 1)、1週間前の日付代入(day -= 7)
3ループ目・・・ day(=-1)は day > 0 を満たさないのでループを抜ける
"""
print('今日は、今月の第' + str(weeks) + weekday + '曜日です。')
#例:今日は、今月の第2月曜日です。
return