¿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"

8
dt = datetime.datetime(*t[:7])

Respuestas:



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í...


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}'

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.



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'
>>> 

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)
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.