表題の通り。自分用メモ
環境はPython3系。
日にち単位の演算(翌日とか)
- 今日の日付取得
- 明日、昨日の計算
必要なモジュールのインポート
from datetime import datetime, date, timedelta
基本これくらいあればいい
今日の日付を取得する
today = datetime.today()
print(datetime.strftime(today, '%Y-%m-%d'))
# 結果
# 2017-12-08
(補足)
- datetime.strftime(変数, フォーマット):日付型→文字列への変換
- datetime.strptime(変数, フォーマット):文字列→日付型への変換
明日、昨日を計算する
tomorrow = today + timedelta(days=1)
yesterday = today - timedelta(days=1)
print("tomorrow -> " + datetime.strftime(tomorrow, '%Y-%m-%d'))
print("yesterday -> " + datetime.strftime(yesterday, '%Y-%m-%d'))
# 結果
# tomorrow -> 2017-12-09
# yesterday -> 2017-12-07
(補足)
- timedeltaオブジェクトは二つの日付や時刻間の差を表す
- timedelta(days=1)というオブジェクトは1日分の差を表す
- 他にはseconds, minutes, hoursみたいな引数が使える
月単位の演算(翌月とか)
datetimeでは計算できないのでdateutilライブラリのrelativedeltaモジュールを使用する。
上記に加えてyear, month, weekとかも使えるのでこれ使えば上記の計算も全部賄えるっぽい。
必要なモジュールのインポート
from dateutil.relativedelta import relativedelta
1ヶ月後、1ヶ月前を計算する
one_month_after = today + relativedelta(months=1)
one_month_ago = today - relativedelta(months=1)
print("one_month_after -> " + datetime.strftime(one_month_after, '%Y-%m-%d'))
print("one_month_ago -> " + datetime.strftime(one_month_ago, '%Y-%m-%d'))
# 結果
# one_month_after -> 2018-01-08
# one_month_ago -> 2017-11-08
応用
ココらへんを応用すれば"初日や末日"みたいなのも計算できる。
「今月の1日」を出す
first_day = today.replace(day=1)
print(datetime.strftime(first_day, '%Y-%m-%d'))
# 結果
# 2017-12-01
「今月の末日」を出す
last_day = (today + relativedelta(months=1)).replace(day=1) - timedelta(days=1)
print(datetime.strftime(last_day, '%Y-%m-%d'))
# 結果
# 2017-12-31
(補足)
- datetimeオブジェクトのreplace()メソッドにday=◯を指定することでその値を置き換えられる
- calenderパッケージを使えばもっと楽にできる(特に末日…)
参考文献
[Python] 1ヶ月後や1年後や月初や月末を簡単に求める(python-dateutil)
Python で前月同日・前月末日を求める
strftimeとstrptimeの違いは何でしょうか?