Python语言精确地从日期中减去月份

示例

使用calendar模块

import calendar
from datetime import date

def monthdelta(date, delta):
    m, y = (date.month+delta) % 12,date.year+ ((date.month)+delta-1) // 12
    if not m: m = 12
    d = min(date.day, calendar.monthrange(y, m)[1])
    return date.replace(day=d,month=m, year=y)

next_month = monthdelta(date.today(), 1) #datetime.date(2016,10,23)

使用dateutils模块

import datetime
import dateutil.relativedelta

d = datetime.datetime.strptime("2013-03-31", "%Y-%m-%d")
d2 = d - dateutil.relativedelta.relativedelta(months=1)  #datetime.datetime(2013,2,28,0,0)