web-dev-qa-db-fra.com

Python - Récupère la date d'hier sous forme de chaîne au format AAAA-MM-JJ

En tant qu'entrée d'une demande d'API, je dois obtenir la date d'hier sous forme de chaîne au format YYYY-MM-DD. J'ai une version de travail qui est:

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)

Il doit y avoir une manière plus élégante de le faire, intéressée autant à des fins éducatives que toute autre chose!

25
Jacob

Vous avez juste besoin de soustraire un jour de la date d'aujourd'hui. datetime.timedelta(1) vous donnera un timedelta objet qui est d'une durée d'un jour et qui peut être soustrait de datetime objet. Ensuite, vous pouvez utiliser datetime.strftime dans orer pour convertir l'objet date en chaîne en fonction de votre format espéré :

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

Notez qu'au lieu d'appeler le datetime.strftime, vous pouvez également utiliser directement la méthode strftime des objets datetime:

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

Une réponse alternative qui utilise la méthode today() pour calculer la date actuelle, puis en soustrait une à l'aide de timedelta(). Les autres étapes restent les mêmes.

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
4
Rahul Mody
>>> import datetime
>>> datetime.date.fromordinal(datetime.date.today().toordinal()-1).strftime("%F")
'2015-05-26'
3
Paul Rubel