Как увеличить дату (месяц и год) и установить день по умолчанию на основе определенных условий? - PullRequest
0 голосов
/ 15 апреля 2019

Моя дата должна всегда приходиться на 8-е или 22-е число, которое выходит за пределы введенной даты.

Например:

Если дата ввода 20190415 , тогда дата вывода должна быть 20190422 , поскольку это ближайшая дата, а если дата ввода 20190424 , то дата вывода должна быть 20190508 .

Example1:
input_date = 20190415
Ожидаемая дата выхода = 20190422

Example2:
input_date = 20190424
Ожидаемая дата выхода = 20190508

Example3:
input_date = 20190506
Ожидаемая дата выхода = 20190508

Example4:
input_date = 20191223
Ожидаемая дата выхода = 20200108

Как нам достичь этого с помощью Python?

Ответы [ 2 ]

1 голос
/ 15 апреля 2019

Вы можете проверить, является ли день больше 22, и если это так, вы установите его на 8-е число следующего месяца. Если оно между 8 и 22, вы устанавливаете его на 22 того же месяца, а если оно ниже 8-го, вы устанавливаете его на 8-е число месяца. Возможно, есть более элегантные способы сделать это с использованием математики дат, но это подойдет для вашего сценария.

Используйте модуль datetime, чтобы узнать, что такое «следующий месяц». Один из способов сделать это - добавить timedelta из 1 месяца к первому из текущего месяца, а затем изменить дату этого объекта 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 на официальной документации . Это довольно долго читать, но у меня на самом деле эта страница помечена закладкой, потому что мне всегда нужно возвращаться и ссылаться на то, как на самом деле использовать модуль:)

0 голосов
/ 16 апреля 2019

Учитывая ввод в виде строки, следующая дата может быть рассчитана с помощью 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") )
...