#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 /