小编典典

如何在不使用库的情况下在python中按自定义月份增加日期时间

all

我需要增加日期时间值的月份

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

当月份为 12 时,它变为 13 并引发错误“月份必须在 1..12 中”。(我预计年份会增加)

我想使用 timedelta,但不需要月份参数。有relativedelta
python
包,但我不想仅仅为此安装它。还有一个使用strtotime的解决方案。

time = strtotime(str(mydate));
next_month = date("Y-m-d", strtotime("+1 month", time));

我不想从 datetime 转换为 str,然后转换为 time,然后再转换为 datetime;因此,它仍然是一个图书馆

有没有人有任何好的和 简单的 解决方案,就像使用 timedelta 一样?


阅读 67

收藏
2022-05-23

共1个答案

小编典典

编辑 - 根据您对日期的评论,如果下个月的天数较少,则需要四舍五入,这是一个解决方案:

import datetime
import calendar

def add_months(sourcedate, months):
    month = sourcedate.month - 1 + months
    year = 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)

此外,如果您不担心小时、分钟和秒,您可以使用date而不是datetime.
如果您担心小时、分钟和秒,您需要修改我的代码以使用datetime并将小时、分钟和秒从源复制到结果。

2022-05-23