🏊♂️
[Python]昨日や明日、月末などの日付を取得したい
日付を使う時
Pythonって何かとバッチ処理とか作ることとか多いと思うんですよ。
バッチ処理作る時、「昨日分のデータ取ってくる」とか「月初に先月のデータを取ってくる」とかだと思うんです。そしたら、実行時の「昨日」とか、「先月」ってどうやってとるんだろう?とお仕事でちょいと悩んだのでまとめます。
datetimeについて
基本的なdatetimeについて少しおさらいです。
import datetime
# 今日の日付を取得する。この場合「2020-04-01」
# datetime.datetime.today()なら時間まで保持する
today = datetime.date.today()
# 年を取得。この場合「2020」
today.year
# 月を取得。この場合「4」
today.month
# 日を取得。この場合「2」
today.day
# 曜日を取得。この場合は「3」(水曜日)
# 0:月,1:火,2:水,3:木,4:金,5:土,6:日
today.weekday()
使い方色々
今日、昨日、明日、1週間前、1週間後、1ヶ月前、1ヶ月後、1年前、1年後
import datetime
from dateutil.relativedelta import relativedelta
# 今日# => 2020-04-02
today = datetime.date.today()
# 昨日# => 2020-04-01
yesterday = today + relativedelta(days=-1)
# 明日# => 2020-04-03
tommorow = today + relativedelta(days=+1)
# 1週間前# => 2020-03-26
one_week_ago = today + relativedelta(weeks=-1)
# 1週間後# => 2020-04-09
one_week_later = today + relativedelta(weeks=+1)
# 1ヶ月前# => 2020-03-02
one_month_ago = today + relativedelta(months=-1)
# 1ヶ月後# => 2020-05-02
one_month_later = today + relativedelta(months=+1)
# 1年前# => 2019-04-02
one_year_ago = today + relativedelta(years=-1)
# 1年後# => 2021-04-02
one_year_later = today + relativedelta(years=+1)
月初、月末、先月初、先月末、翌月初、翌月末
import datetime
from dateutil.relativedelta import relativedelta
# 今日# => 2020-04-02
today = datetime.date.today()
# 月初(今月の1日にする) # => 2020-04-01
beginning_of_the_month = today + relativedelta(day=1)
# 月末 (来月の1日に合わせて1日分戻る) # => 2020-04-30
end_of_month = today + relativedelta(months=+1,day=1,days=-1)
# 先月初(1月分戻して、1日にする)# => 2020-03-01
beginning_of_the_last_month = today + relativedelta(months=-1,day=1)
# 先月末 (今月の1日から1日分戻る)# => 2020-03-31
end_of_the_last_month = today + relativedelta(day=1,days=-1)
# 翌月初(1月分進めて、1日にする)# => 2020-05-01
beginning_of_the_next_month = today + relativedelta(months=+1,day=1)
# 翌月末 (翌々月初[2ヶ月後の1日]から1日分戻す)# => 2020-05-31
end_of_the_next_month = today + relativedelta(months=+2,day=1,days=-1)
考え方
year,month,dayなどで絶対的にして、years,months,daysなどで相対的に指定しています。
参考
Discussion