python datetime 加一个月,如何在python中自定义月份增加datetime,而不使用库

  • Post author:
  • Post category:python


I need to increment the month of a datetime value

next_month = datetime.datetime(mydate.year, mydate.month+1, 1)

when the month is 12, it becomes 13 and raises error “month must be in 1..12”. (I expected the year would increment)

I wanted to use timedelta, but it doesn’t take month argument.

There is relativedelta python package, but i don’t want to install it just only for this.

Also there is a solution using strtotime.

time = strtotime(str(mydate));

next_month = date(“Y-m-d”, strtotime(“+1 month”, time));

I don’t want to convert from datetime to str then to time, and then to datetime; therefore, it’s still a library too

Does anyone have any good and simple solution just like using timedelta?

解决方案

Edit – based on your comment of dates being needed to be rounded down if there are fewer days in the next month, here is a solution:

>>> import datetime

>>> import calendar

>>>

>>> def add_months(sourcedate,months):

… month = sourcedate.month – 1 + months

… year = int(sourcedate.year + month / 12 )

… month = month % 12 + 1

… day = min(sourcedate.day,calendar.monthrange(year,month)[1])

… return datetime.date(year,month,day)

>>> somedate = datetime.date.today()

>>> somedate

datetime.date(2010, 11, 9)

>>> add_months(somedate,1)

datetime.date(2010, 12, 9)

>>> add_months(somedate,23)

datetime.date(2012, 10, 9)

>>> otherdate = datetime.date(2010,10,31)

>>> add_months(otherdate,1)

datetime.date(2010, 11, 30)

Also, if you’re not worried about hours, minutes and seconds you could use date rather than datetime. If you are worried about hours, minutes and seconds you need to modify my code to use datetime and copy hours, minutes and seconds from the source to the result.