Jacob Jacob - 22 days ago 7
Python Question

Python - Get Yesterday's date as a string in YYYY-MM-DD format

As an input to an API request I need to get yesterday's date as a string in the format

YYYY-MM-DD
. I have a working version which is:

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)


There must be a more elegant way to do this, interested for educational purposes as much as anything else!

Answer

You Just need to subtract one day from today's date. datetime.timedelta(1) will gieve you a timedelta object which is a duration of one day and is subtractable from datetime object. Then you can use datetime.strftime in orer to convert the date object to string based on your espected format:

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

Note that instead of calling the datetime.strftime function, you can also directly use strftime method of datetime objects:

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