Formatowanie „wczorajszej” daty w pythonie

232

Muszę znaleźć „wczorajszą” datę w tym formacie MMDDYYw Pythonie.

Na przykład dzisiejsza data byłaby reprezentowana w następujący sposób: 111009

Z łatwością mogę to zrobić na dziś, ale mam problem z automatycznym wykonaniem tego na „wczoraj”.

y2k
źródło

Odpowiedzi:

387

Posługiwać się datetime.timedelta()

>>> from datetime import date, timedelta
>>> yesterday = date.today() - timedelta(days=1)
>>> yesterday.strftime('%m%d%y')
'110909'
Jarret Hardie
źródło
1
Jeśli akurat pracujesz z pandami, możesz również użyć:print((pd.to_datetime('Today') - pd.Timedelta('1 days')).strftime('%m%d%y'))
etna
Jeśli zdarzy ci się szukać opcji, możesz również użyć Pendulum ( pendulum.eustace.io ): pendulum.now (). Odejmij (dni = -1) .strftime ('% m% d% y')
AFD
165
from datetime import datetime, timedelta

yesterday = datetime.now() - timedelta(days=1)
yesterday.strftime('%m%d%y')
Nadia Alramli
źródło
21

To powinno zrobić, co chcesz:

import datetime
yesterday = datetime.datetime.now() - datetime.timedelta(days = 1)
print yesterday.strftime("%m%d%y")
Stef
źródło
1
Dlaczego bardziej obchodzi Cię data dla osób z przesunięciem 0 UTC niż data w lokalnej strefie czasowej systemu?
Jeffrey Harris
1
Skopiowałem to z mojego kodu, podczas korzystania z bazy danych często dbasz o UTC. Usunięte rzeczy UTC.
Stef
7

wszystkie odpowiedzi są poprawne, ale chcę wspomnieć, że delta czasu przyjmuje negatywne argumenty .

>>> from datetime import date, timedelta
>>> yesterday = date.today() + timedelta(days=-1)
>>> print(yesterday.strftime('%m%d%y')) #for python2 remove parentheses 
Iman Mirzadeh
źródło
5

Czy mogę po prostu uczynić to nieco bardziej międzynarodowym i sformatować datę zgodnie z międzynarodowym standardem, a nie w dziwnym miesiącu-dniu-roku, który jest powszechny w Stanach Zjednoczonych?

from datetime import datetime, timedelta

yesterday = datetime.now() - timedelta(days=1)
yesterday.strftime('%Y-%m-%d')
Arvid Bäärnhielm
źródło
Zgadzam się, że używamy dziwnego formatu daty w Stanach Zjednoczonych, ale OP specjalnie poprosił o ten dziwny format - który w tym przypadku to ``% m% d% y ''.
DaveL17,
@ DaveL17, fair point. Pozostawię odpowiedź wszystkim spoza USA, którzy natkną się na to pytanie.
Arvid Bäärnhielm
2

Aby rozwinąć odpowiedź udzieloną przez Chrisa

jeśli chcesz przechowywać datę w zmiennej w określonym formacie, jest to najkrótsza i najskuteczniejsza metoda, o ile mi wiadomo

>>> from datetime import date, timedelta                   
>>> yesterday = (date.today() - timedelta(days=1)).strftime('%m%d%y')
>>> yesterday
'020817'

Jeśli chcesz to jako liczbę całkowitą (co może być przydatne)

>>> yesterday = int((date.today() - timedelta(days=1)).strftime('%m%d%y'))
>>> yesterday
20817
Pär Berge
źródło