¿Cómo convierto una fecha y hora de Python en una cadena, con formato de fecha legible?

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

¿Cómo convierto eso en una cuerda ?:

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

Respuestas:

242

La clase datetime tiene un método strftime. Los documentos de Python documentan los diferentes formatos que acepta:

Para este ejemplo específico, se vería algo así como:

my_datetime.strftime("%B %d, %Y")
Cristian
fuente
1
Pregunta tonta ... ¿Son las strftimediferencias entre Python 2 y 3?
jww
Y si de
esa
112

Así es como puede lograr lo mismo utilizando la función de formateo general de Python ...

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

Los caracteres de formato utilizados aquí son los mismos que los utilizados en strftime . No te pierdas el líder : en el especificador de formato.

El uso de format () en lugar de strftime () en la mayoría de los casos puede hacer que el código sea más legible, más fácil de escribir y coherente con la forma en que se genera la salida formateada ...

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

Compare lo anterior con la siguiente alternativa strftime () ...

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

Además, lo siguiente no va a 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

Y así...

Autodidacta
fuente
1
Me he estado preguntando cuáles son los beneficios de usar format () para este caso, durante strftime (). ¿Alguno de los métodos presenta un beneficio distinto de la preferencia personal? ¿Cuáles son las diferencias de rendimiento?
Andre
2
@ Andre Gracias por tu pregunta! Las preferencias personales a menudo están guiadas por la experiencia. Consulte mi respuesta actualizada sobre por qué prefiero format () sobre strftime (). Rendimiento y Python son dos palabras que no van bien juntas. No me preocuparía demasiado el rendimiento si hubiera decidido usar Python. Cuando necesito rendimiento, uso un lenguaje de alto rendimiento estáticamente escrito.
Autodidacta
1
El método de formato es más simple en la mayoría de los casos. Comparar: print 'Today is {:%B %d, %Y}'.format(datetime.now())a print 'Today is {}'.format(datetime.now().strftime('%B %d, %Y'). Cuando esté utilizando el método format () de todos modos, ¿por qué no utilizarlo también para el formato de fecha?
ChaimG
30

Usando f-strings, en Python 3.6+.

from datetime import datetime

date_string = f'{datetime.now():%Y-%m-%d %H:%M:%S%z}'
Natim
fuente
Esto arroja un error de sintaxis: "SyntaxError: sintaxis no válida". ¿Podría por favor elaborar?
sajid
Okay. Tengo Python 3.5.1. Es por eso que. Gracias por la aclaración.
Sajid
21

Muy vieja pregunta, lo sé. pero con las nuevas cadenas f (a partir de python 3.6) hay nuevas opciones. así que aquí 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()y strptime()Comportamiento explica lo que significan los especificadores de formato.

protagonista de hiro
fuente
10

El objeto de fecha y hora de Python tiene un atributo de método, que se imprime en formato legible.

>>> a = datetime.now()
>>> a.ctime()
'Mon May 21 18:35:18 2018'
>>> 
SuperNova
fuente
Esta es una de las mejores, más fáciles y rápidas formas de obtener DateTime en un formato legible.
Mujeeb Ishaque
-2

Esto es para formatear la fecha?

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