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!
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'
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
>>> import datetime
>>> datetime.date.fromordinal(datetime.date.today().toordinal()-1).strftime("%F")
'2015-05-26'