Pythonで来月1日と月末の日付を取得する方法

2010-03-18
このエントリーをはてなブックマークに追加

簡単かと思いきや、これが意外とめんどくさいんです。

import datetime

_today = datetime.date.today()
_next_month = datetime.date(_today.year, _today.month+1, 1)

でいいかと思いきや、今日が12月だとしたらエラーが出ます。monthの値は1から12の間に限定されていて、自動的に「月が13なら翌年」にはならないんですね。

 ので、

from dateutil.relativedelta import relativedelta
import calendar

_date = datetime.date.today() + relativedelta(months=1)
_next_first = datetime.date(_date.year, _date.month, 1)
_next_last = datetime.date(_date.year, _date.month, calendar.monthrange(_date.year, _date.month)[1])

timedeltaだと「日の加減算」しかできないのですが、relativedeltaだと年、月、日の加減算が可能になります。「years」「months」「days」でそれぞれ指定できます。(months=-1)で前月です。

月末日を求めるには「calendar.monthrange」を利用します。

print calendar.monthrange(2010, 3)

で、(0,31)と表示されます。これは2010年3月が月曜から始まり、31日までありますよ、ということです。曜日は月曜の0から始まり日曜の6で終わります。ので、

calendar.monthrange(2010, 3)[1]

で月末日付が取得できるというわけです。

Python2.5でのソースコードです。他のバージョンでは検証していません。

Tags: