Получить дату за год до заданной даты в python?

#python #python-3.x

#python #python-3.x

Вопрос:

У меня есть переменная, которая будет содержать дату…

 end_date = '3/15/2019'
  

Я хочу, чтобы результат был следующим:

 start_date = '3/15/2018'  
  

Кто-нибудь может мне помочь, как написать код для этого?

Ответ №1:

Если вы хотите дату строго за 365 дней до заданной даты:

 import datetime
(datetime.datetime.strptime(end_date, '%m/%d/%Y') - datetime.timedelta(days=365)).strftime('%m/%d/%Y')

'03/15/2018'
  

Ответ №2:

Если это всегда строка, вы можете разрезать и вычесть 1 (после преобразования в int):

 end_date = '3/15/2019'

start_date = end_date[:-4]   str(int(end_date[-4:])-1)

print(start_date)

>>> 3/15/2018
  

Комментарии:

1. Не забывайте о 29 февраля!

Ответ №3:

Я рекомендую библиотеку arrow, которая помогает вам сдвигать время на единицу (от секунд до лет). Более того, это может иметь дело с високосным годом!

 import arrow


date_format = 'M/D/YYYY'
end_date = '2/29/2016'

# shift by years:
start_date = arrow.get(end_date, date_format).shift(years=-1)
start_date = start_date.format(date_format)
print(start_date)

>>> '2/28/2015'

# shift by 365 days:
start_date = arrow.get(end_date, date_format).shift(days=-365)
start_date = start_date.format(date_format)
print(start_date)

>>> '3/1/2015'
  

документ: https://arrow.readthedocs.io/en/latest /