2015-05-27 13 views
10

Jako dane wejściowe żądania interfejsu API należy pobrać wczorajszą datę jako ciąg znaków w formacie YYYY-MM-DD. Mam działającą wersję, która jest:Python - Pobierz wczorajszą datę jako ciąg znaków w formacie RRRR-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) 

Musi istnieć bardziej elegancki sposób na zrobienie tego, zainteresowany celami edukacyjnymi tak samo jak cokolwiek innego!

+4

można spojrzeć na to: http://stackoverflow.com/questions/1712116/formatting-yesterdays-date-in-python?rq=1 i po prostu zmodyfikować ciągu formatu – EdChum

+1

Dzięki Ed to nam eful - przeszukałem siebie, obiecałem ....... – Jacob

Odpowiedz

15

Wystarczy odjąć jeden dzień od dzisiejszej daty. datetime.timedelta(1) dostarczy Ci timedelta object, który trwa jeden dzień i jest odejmowany od obiektu datetime. Następnie można użyć datetime.strftime w orer konwertować obiekt data na ciąg w oparciu o espected format:

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

Zauważ, że zamiast wywoływać funkcję datetime.strftime, można również bezpośrednio wykorzystać strftime metoda datetime obiektów:

>>> (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' 
Powiązane problemy