如何根据特定条件增加日期(月和年)并将日期设置为默认值?

时间:2019-04-15 19:59:00

标签: python python-3.x datetime python-datetime

我的日期应始终位于输入日期的8号或22号。

例如:

如果输入日期为 20190415 ,则输出日期应为 20190422 ,因为这是最近的日期,如果输入日期为 20190424 ,则输出日期应为 20190508

示例1:
input_date = 20190415
预期的output_date = 20190422

示例2
input_date = 20190424
预期的output_date = 20190508

示例3
input_date = 20190506
预期的output_date = 20190508

示例4:
input_date = 20191223
预期的output_date = 20200108

我们如何使用Python实现这一目标?

2 个答案:

答案 0 :(得分:1)

您可以检查日期是否大于22,如果是,则将其设置为下个月的8号。如果介于8到22之间,则将其设置为当月的22,如果低于8,则将其设置为该月的8。使用日期数学可能有更优雅的方法,但这将适合您的情况。

使用datetime模块找出“下个月”是什么。一种方法是将timedelta对象添加到当月的第一个月,然后将该datetime对象上的日期更改为第八。这是一个简短的示例,看起来像这样:

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上如何工作的详细信息。读了很长时间,但实际上我将该页面加了书签,因为我总是必须回头参考如何实际使用该模块:)

答案 1 :(得分:0)

将输入视为字符串,可以使用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") )