万年素人からHackerへの道

万年素人がHackerになれるまで殴り書きするぜ。

Pythonで月の計算

1ヶ月後の日付を取りたい

datetime.datetime(2008, 12, 1) + datetime.timedelta(months=1)

これだとエラーになる。 daysはあるのに、monthsというパラメータが取れないからだ。

[Python] 月の加減算処理ができない? | それなりブログ

これを見た。

Pythonでの日付関連処理 | 情シスハック

from dateutil.relativedelta import relativedelta

これを使えばできるようだが、インストールが必要なのか出来ないこともある。

endo blog: Pythonで時間関連の関数の勉強(datetime) これを見ると、1ヶ月前の計算だが、

i = today - datetime.timedelta(days=30)

と単純に30日で引いてる・・・。 これだと、2/28の1ヶ月前に1月28日になるのか、1月31日になるのかわからないのでは?

# 3月29日を作り、
march = datetime.datetime(2011,3,30)
# 30日前?
march - datetime.timedelta(days=30)

結果は、月末の2月28日ではなく27日

datetime.datetime(2011, 2, 27, 0, 0)

では、逆に1か月後

# 2月28日を作り、
feb = datetime.datetime(2011,2,28)
# 30日後?
feb + datetime.timedelta(days=30)

結果は、

datetime.datetime(2011, 3, 30, 0, 0)

普通に30日足してるだけか・・・。 3月1日だと4月1日ではなく3月31日になるし・・・。却下!