如何根据具体情况增加日期(月和年)并将日期设置为默认日期?

2024-04-26 09:55:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我的日期应该总是在输入日期之后的8号或22号。你知道吗

例如:

如果输入日期为20190415,则输出日期应为20190422,因为这是最近的日期;如果输入日期为20190424,则输出日期应为20190508。你知道吗

示例1:
输入日期=20190415
预计输出日期=20190422

示例2:
输入日期=20190424
预计产量\日期=20190508

示例3:
输入日期=20190506
预计产量\日期=20190508

示例4:
输入日期=20191223
预计输出日期=20200108

如何使用Python实现这一点?你知道吗


Tags: 示例产量
2条回答

将输入视为字符串,可以使用timedelta计算下一个日期,请查看以下代码:

if 8<datetime.strptime(input_date, "%Y%m%d").day < 22:
    delta = 22 - datetime.strptime(input_date, "%Y%m%d").day
    print((datetime.strptime(input_date, "%Y%m%d") + 
           timedelta(days=delta)).strftime("%Y%m%d"))
elif datetime.strptime(str(input_date), "%Y%m%d").day < 8:
    delta = 8 - datetime.strptime(input_date, "%Y%m%d").day
    print((datetime.strptime(input_date, "%Y%m%d") + 
           timedelta(days=delta)).strftime("%Y%m%d"))
else:
    delta = (datetime.strptime(input_date, "%Y%m%d")+ relativedelta(months=+1)).day -8
    print((datetime.strptime(input_date, "%Y%m%d") + relativedelta(months=+1) - 
           timedelta(days=delta)).strftime("%Y%m%d") )

你可以检查一天是否大于22,如果大于22,你可以将它设置为下个月的8号。如果它在8到22之间,你就把它设为同一个月的22,如果它低于8,你就把它设为这个月的8。可能有更优雅的方法来使用日期数学,但这将适用于您的场景。你知道吗

使用datetime模块找出“下个月”是什么。一种方法是将1个月的timedelta添加到当前月份的第一个月,然后将datetime对象上的日期更改为第8个月。下面是一个简单的例子:

from datetime import date, timedelta

input_date = date(2019, 12, 23)

if input_date.day > 22:
    output_date = date(input_date.year, input_date.month) + timedelta(days=31)
    output_date = output_date.replace(day = 8)

您可以阅读更多关于datetime模块如何在the official documentation上工作的详细信息。这本书读得有点长,但实际上我已经把那个页面标上了书签,因为我总是要回去参考如何实际使用模块:)

相关问题 更多 >