Formatando a data de ontem em python

232

Preciso encontrar a data de "ontem" nesse formato MMDDYYem Python.

Por exemplo, a data de hoje seria representada assim: 111009

Posso fazer isso facilmente por hoje, mas tenho problemas para fazê-lo automaticamente para "ontem".

y2k
fonte

Respostas:

387

Usar datetime.timedelta()

>>> from datetime import date, timedelta
>>> yesterday = date.today() - timedelta(days=1)
>>> yesterday.strftime('%m%d%y')
'110909'
Jarret Hardie
fonte
1
Se acontecer de você estar trabalhando com pandas, você pode também usar:print((pd.to_datetime('Today') - pd.Timedelta('1 days')).strftime('%m%d%y'))
Etna
Se você procurar opções, também poderá usar o Pendulum ( pendulum.eustace.io ): pendulum.now (). Subtract (days = -1) .strftime ('% m% d% y')
AFD de
165
from datetime import datetime, timedelta

yesterday = datetime.now() - timedelta(days=1)
yesterday.strftime('%m%d%y')
Nadia Alramli
fonte
21

Isso deve fazer o que você deseja:

import datetime
yesterday = datetime.datetime.now() - datetime.timedelta(days = 1)
print yesterday.strftime("%m%d%y")
Stef
fonte
1
Por que você se importa mais com a data das pessoas no UTC que compensam 0 do que com a data no fuso horário local do sistema?
11119 Jeffrey Harris
1
Eu copiei isso do meu código, no uso do banco de dados você costuma se importar com o UTC. Removido o material UTC.
Stef
7

todas as respostas estão corretas, mas quero mencionar que o delta do tempo aceita argumentos negativos .

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

Eu poderia tornar isso um pouco mais internacional e formatar a data de acordo com o padrão internacional e não no estranho mês-dia-ano, que é comum nos EUA?

from datetime import datetime, timedelta

yesterday = datetime.now() - timedelta(days=1)
yesterday.strftime('%Y-%m-%d')
Arvid Bäärnhielm
fonte
Concorde que usamos um formato de data estranho nos Estados Unidos, mas o OP solicitou especificamente esse formato estranho - que neste caso é ``% m% d% y ''.
DaveL17 26/03/19
@ DaveL17, ponto justo. Deixarei a resposta para todos os fora dos EUA que se deparam com essa pergunta.
Arvid Bäärnhielm 29/03/19
2

Para expandir a resposta dada por Chris

se você deseja armazenar a data em uma variável em um formato específico, essa é a maneira mais curta e eficaz, até onde eu sei

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

Se você quiser como um número inteiro (o que pode ser útil)

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