datetimeパッケージの利用例
時間や日付に関しての情報を扱うdatetimeパッケージを使って、例えば次の月曜日の日付を得る、という例。
今日の日付を得る
datetime.dateオブジェクトのtoday()関数を使う。
aDate = datetime.date.today()
print(aDate)
>>> 2017-05-28
任意のフォーマットで日付を得たい場合はdate.strftime()関数をつかう。書式の意味は、pythonのドキュメント参照。
print(aDate.strftime("%Y.%m.%d"))
>>> 2017.05.28
曜日の取得
曜日の取得には、date.weekday()関数を使う。月曜日を0、日曜日を6として0から6までの数字で返る。
print(aDate.weekday())
>>> 6 #(日曜日)
日付の演算
3日後の日付を得たいとかの時、例えば月またぎや年またぎになるときに年・月の計算までdatetimeパッケージにやってもらうには、aDate+=3ではだめで、timedeltaオブジェクトという時間の差分情報を扱うオブジェクトを使う。私がやりたかったのは今日を含めて直近の水曜日の日付を得たい事だったので、次の水曜日までの日数を表す配列を作って、日付を求める。
aDate = datetime.date.today()
print(aDate.strftime("%Y.%m.%d"))
>>> 2017.05.28
#今日は何曜日?( 月曜日 = 0, 日曜日 = 6 )
weekday = aDate.weekday()
#次の水曜日までの日数を配列にしておく。先頭が月曜日からの日数を示す。(水曜日まで、あと2日という意味)
arToWednesday=[2,1,0,6,5,4,3]
#今日からの日数は?
shiftNum = arToWednesday[weekday]
#shiftNum日分のdatetime.timedeltaオブジェクトを生成して、今日を示すaDate変数に足し込む
delta = datetime.timedelta(days=shiftNum) #時の差分を示すときはhours=, 週の場合 weeks=で指定。
nextDate = aDate + delta
print(nextDate.strftime("%Y.%m.%d"))
>>> 2017.05.31
ちなみに、特定の曜日までの日数を配列ではなく、アルゴリズムで計算するとすると、以下のような感じ。
shiftNum = 3 - aDate.weekday()
#3は目標とする曜日で水曜日の意味。
shiftNum = shiftNum+7 if shiftNum < 0 else shiftNum
#引いて負になる場合、次の週になるので、7を足す。