【Python】日付の計算

バッチ処理を行う際には、今日から○日前や△ヶ月前などを
python内で動的に計算してから処理したいケースがあります。

そういった場合、どのようにして日付の計算をPythonで実行するのか、
これからみていきましょう。

まずは今日の日付の取得から

import datetime

today = datetime.date.today()
print(today)
# 実行結果
2018-05-10

これで今日の日付が取得できましたね。
すごく簡単に日付を取得することができました。

さて、次のステップに移りましょう。

先月の日付を取得する

さきほどのスクリプトで今日の日付を取得することができましたね。
それを使って、先月の日付を取得してみましょう。

先に、計算をするためのライブラリが入っていなければ、
以下のコードを実行してライブラリをインストールしてください。

pip install python-dateutil

ライブラリがインストールできましたら、準備万端!

import datetime
from dateutil.relativedelta import relativedelta

today = datetime.date.today()
month = today + relativedelta(months=-1) 
print(month)
# 実行結果
2018-04-10

居の日付が5月10日なので、そこから1ヶ月戻った4月10日のデータが取得できましたね!

月以外にも計算可能!

月の計算だけでなく、その他の単位でも計算することが可能です。

# 年の計算
date = today + relativedelta(years=-1) 
print(date)
# 月の計算
date = today + relativedelta(months=-1) 
print(date)
# 日の計算
date = today + relativedelta(days=-1) 
print(date)
# 出力結果
2017-05-10
2018-04-10
2018-05-09

計算する代表的な単位として年月日を実行しましたが、
時間や分レベルでも計算することは可能です。

さらに細かく計算してみたいと言う場合は、
こちらのサイトを参照してみてください。

単位の組み合わせも可能

先程までは先月や先日といったひとつの単位で計算しておりました。 しかし、この計算は単体だけでなく、組み合わせて計算することも可能です。

早速例を見てみましょう。

import datetime
from dateutil.relativedelta import relativedelta

today = datetime.date.today()
date = today + relativedelta(months=-1, days=-1) 
print(date)
# 実行結果
2018-04-09

今日が2018年5月10日なので、1ヶ月前だと2018年5月10日になります。
そこに1日の計算も加えました。

計算としては

1っヶ月前の日付 + 1日前の日付

このようになります。

どうやら組み合わせできる数が2つまでのようなので、
3つ以上組み合わせる場合には、工夫が必要になるかもしれません。

ポイント
- Python内で動的に日付を計算させるには、python-dateutilライブラリを使う
- 単位は2つまで組み合わせて計算させることが可能