簡単かと思いきや、これが意外とめんどくさいんです。
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でのソースコードです。他のバージョンでは検証していません。