让AI学习CSDN上的知识再生成按月份累加的合理逻辑代码

条件

1. 只累加月份,忽略天,但天不能错

2. 闰年2.29,第二年不是闰年,则应该是2.28日

3.31日这类月份,加1个月应该是9.30日,不应该是10.1日,或者9.31日,加2个月应该是10.31日,不应该是10.30日,加3个月应该是11.30,以此类推

我让AI先学习了下csdn的一篇文章

日期累加_从日到月有多少种累加方式-CSDN博客

然后把条件发给它,就生成了可用python代码(记得chatgpt有python环境)你需要其他代码时,先让它生成python跑通了,再让它转其他的代码

from datetime import datetime
from dateutil.relativedelta import relativedelta


def add_months_to_date(start_date: str, months_to_add: int, end_date=None) -> str:
    date_format = "%Y-%m-%d"
    date_obj = datetime.strptime(start_date, date_format)

    end_date = date_obj + relativedelta(months=months_to_add)

    if date_obj.day == 31:
        if end_date.month in {4, 6, 9, 11}:
            end_date = end_date.replace(day=30)
        elif end_date.month == 2:
            if end_date.year % 4 == 0 and (end_date.year % 100 != 0 or end_date.year % 400 == 0):
                end_date = end_date.replace(day=29)
            else:
                end_date = end_date.replace(day=28)
    elif date_obj.day == 30 and end_date.month == 2:
        if end_date.year % 4 == 0 and (end_date.year % 100 != 0 or end_date % 400 == 0):
            end_date = end_date.replace(day=29)
        else:
            end_date = end_date.replace(day=28)
    elif date_obj.day == 29 and date_obj.month == 2:
        if end_date.month == 2 and end_date.day > 28:
            if end_date.year % 4 == 0 and (end_date.year % 100 != 0 or end_date.year % 400 == 0):
                end_date = end_date.replace(day=29)
            else:
                end_date = end_date.replace(day=28)

    return end_date.strftime(date_format)


# Test with the leap year example
print(add_months_to_date("2024-02-29", 12))

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

森叶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值