Python - Получить вчера дату в виде строки в формате ГГГГ-ММ-ДД

В качестве ввода для запроса API мне нужно получить вчера дату в виде строки в формате YYYY-MM-DD. У меня есть рабочая версия:

yesterday = datetime.date.fromordinal(datetime.date.today().toordinal()-1)
report_date = str(yesterday.year) + \
   ('-' if len(str(yesterday.month)) == 2 else '-0') + str(yesterday.month) + \
   ('-' if len(str(yesterday.day)) == 2 else '-0') + str(yesterday.day)

Должен быть более элегантный способ сделать это, заинтересованный в образовательных целях, как и все остальное!

Ответ 1

Вам просто нужно вычесть один день с сегодняшнего дня. datetime.timedelta(1) предоставит вам timedelta object, который длится один день и вычитается из объекта datetime. Затем вы можете использовать datetime.strftime в orer для преобразования объекта даты в строку на основе ожидаемый формат:

>>> from datetime import datetime, timedelta
>>> datetime.strftime(datetime.now() - timedelta(1), '%Y-%m-%d')
'2015-05-26'

Обратите внимание, что вместо вызова функции datetime.strftime вы также можете напрямую использовать метод strftime объектов datetime:

>>> (datetime.now() - timedelta(1)).strftime('%Y-%m-%d')
'2015-05-26'

Ответ 2

>>> import datetime
>>> datetime.date.fromordinal(datetime.date.today().toordinal()-1).strftime("%F")
'2015-05-26'

Ответ 3

Альтернативный ответ, который использует метод today() для вычисления текущей даты, а затем вычитает timedelta() с помощью timedelta(). Остальные шаги остаются прежними.

https://docs.python.org/3.7/library/datetime.html#timedelta-objects

from datetime import date, timedelta
today = date.today()
yesterday = today - timedelta(days = 1)
print(today)
print(yesterday)

Output: 
2019-06-14
2019-06-13