Como transformar um datetime de python em uma string, com data de formato legível?

171
t = e['updated_parsed']
dt = datetime.datetime(t[0],t[1],t[2],t[3],t[4],t[5],t[6]
print dt
>>>2010-01-28 08:39:49.000003

Como faço para transformar isso em uma string ?:

"January 28, 2010"
TIMEX
fonte
8
dt = datetime.datetime(*t[:7])

Respostas:

242

A classe datetime possui um método strftime. Os documentos do Python documentam os diferentes formatos aceitos:

Para este exemplo específico, seria algo como:

my_datetime.strftime("%B %d, %Y")
Cristian
fonte
1
Pergunta idiota ... As strftimediferenças entre Python 2 e 3?
JWW
E se de que maneira
Xanlantos
112

Aqui está como você pode fazer o mesmo usando a função de formatação geral do python ...

>>>from datetime import datetime
>>>"{:%B %d, %Y}".format(datetime.now())

Os caracteres de formatação usados ​​aqui são os mesmos que os usados ​​pelo strftime . Não perca a liderança : no especificador de formato.

Usar format () em vez de strftime () na maioria dos casos pode tornar o código mais legível, mais fácil de escrever e consistente com a maneira como a saída formatada é gerada ...

>>>"{} today's date is: {:%B %d, %Y}".format("Andre", datetime.now())

Compare o acima com a seguinte alternativa strftime () ...

>>>"{} today's date is {}".format("Andre", datetime.now().strftime("%B %d, %Y"))

Além disso, o seguinte não vai funcionar ...

>>>datetime.now().strftime("%s %B %d, %Y" % "Andre")
Traceback (most recent call last):
  File "<pyshell#11>", line 1, in <module>
    datetime.now().strftime("%s %B %d, %Y" % "Andre")
TypeError: not enough arguments for format string

E assim por diante...

Autodidata
fonte
1
Fiquei me perguntando quais são os benefícios de usar format () para este caso, durante strftime (). Qualquer um dos métodos apresenta um benefício diferente da preferência pessoal? Quais são as diferenças de desempenho?
Andre
2
@ André Obrigado pela sua pergunta! As preferências pessoais são geralmente guiadas pela experiência. Por favor, veja minha resposta atualizada para saber por que prefiro format () sobre strftime (). Performance e Python são duas palavras que não combinam bem. Eu não estaria muito preocupado com o desempenho se decidisse usar o Python. Quando preciso de desempenho, uso alguma linguagem de alto desempenho com estaticamente digitada.
Autodidata
1
O método de formatação é mais simples na maioria dos casos. Compare: print 'Today is {:%B %d, %Y}'.format(datetime.now())para print 'Today is {}'.format(datetime.now().strftime('%B %d, %Y'). Quando você está usando o método format (), por que não usá-lo também para a formatação da data?
precisa saber é
30

Usando f-strings, em Python 3.6+.

from datetime import datetime

date_string = f'{datetime.now():%Y-%m-%d %H:%M:%S%z}'
Natim
fonte
Isso gera um erro de sintaxe: "SyntaxError: sintaxe inválida". Você poderia por favor elaborar?
Sajid
Está bem. Eu tenho o Python 3.5.1. É por isso que. Obrigado pelo esclarecimento.
Sajid
21

pergunta muito antiga, eu sei. mas com as novas strings f (a partir do python 3.6), existem novas opções. então aqui para completar:

from datetime import datetime

dt = datetime.now()

# str.format
strg = '{:%B %d, %Y}'.format(dt)
print(strg)  # July 22, 2017

# datetime.strftime
strg = dt.strftime('%B %d, %Y')
print(strg)  # July 22, 2017

# f-strings in python >= 3.6
strg = f'{dt:%B %d, %Y}'
print(strg)  # July 22, 2017

strftime()e strptime()Comportamento explica o que significam os especificadores de formato.

hiro protagonista
fonte
9

O objeto datetime do Python possui um atributo de método, que é impresso em formato legível.

>>> a = datetime.now()
>>> a.ctime()
'Mon May 21 18:35:18 2018'
>>> 
Super Nova
fonte
Essa é uma das melhores, mais fáceis e rápidas maneiras de obter o DateTime em um formato legível.
Mujeeb Ishaque 12/06
-2

Isto é para formatar a data?

def format_date(day, month, year):
        # {} betekent 'plaats hier stringvoorstelling van volgend argument'
        return "{}/{}/{}".format(day, month, year)
Thomas Wouters
fonte