Convertir el objeto datetime en una cadena de fecha solo en Python

Veo mucho al convertir una cadena de fecha en un objeto de datetime y datetime en Python, pero quiero ir a la inversa.
Tengo

 datetime.datetime(2012, 2, 23, 0, 0) 

y me gustaría convertirlo en una cadena como '2/23/2012' .

Puedes usar strftime para ayudarte a formatear tu fecha.

P.ej,

 import datetime t = datetime.datetime(2012, 2, 23, 0, 0) t.strftime('%m/%d/%Y') 

rendirá:

 '02/23/2012' 

Más información sobre el formato ver aquí.

date objetos de date y date y datetime (y también la time ) admiten un mini-idioma para especificar el resultado , y hay dos formas de acceder a él:

  • llamada de método directo: dt.strftime('format here') ; y
  • nuevo método de formato: '{:format here}'.format(dt)

Entonces tu ejemplo podría verse como:

 dt.strftime('%m/%d/%Y') 

o

 '{:%m/%d/%Y}'.format(dt) 

Para completar el tema: también puede acceder directamente a los atributos del objeto, pero solo obtiene los números:

 '%s/%s/%s' % (dt.month, dt.day, dt.year) 

El tiempo que lleva aprender el mini-idioma lo vale.


Para referencia, aquí están los códigos utilizados en el mini-idioma:

  • %a Weekday como nombre abreviado de la localidad.
  • %A Weekday como nombre completo del local.
  • %w Weekday como número decimal, donde 0 es domingo y 6 es sábado.
  • %d Día del mes como un número decimal con cero rellenos.
  • %b Mes como nombre abreviado del local.
  • %B mes como nombre completo del local.
  • %m Mes como un número decimal con cero rellenos. 01, …, 12
  • %y Año sin siglo como un número decimal con cero rellenos. 00, …, 99
  • %Y Año con siglo como número decimal. 1970, 1988, 2001, 2013
  • %H Hora (reloj de 24 horas) como un número decimal sin relleno. 00, …, 23
  • %I Hour (reloj de 12 horas) como un número decimal sin relleno. 01, …, 12
  • El equivalente de %p Locale de AM o PM.
  • %M Minuto como un número decimal rellenado con cero. 00, …, 59
  • %S Segundo como un número decimal rellenado con cero. 00, …, 59
  • %f Microsegundo como un número decimal, rellenado con cero a la izquierda. 000000, …, 999999
  • %z UTC offset en la forma + HHMM o -HHMM (vacío si no se usa), +0000, -0400, +1030
  • %Z Nombre de la zona horaria (vacío si es ingenuo), UTC, EST, CST
  • %j Día del año como un número decimal con cero rellenos. 001, …, 366
  • %U Número de la semana del año (el domingo es el primero) como un número decimal con cero rellenado.
  • %W Número de la semana del año (el lunes es el primero) como un número decimal.
  • %c Representación apropiada de la fecha y hora del local.
  • %x Representación apropiada de la fecha del local.
  • Representación apropiada del tiempo de %X Locale.
  • %% Un carácter literal ‘%’.

Otra opción:

 import datetime now=datetime.datetime.now() now.isoformat() # ouptut --> '2016-03-09T08:18:20.860968' 

Podría usar métodos de formato de cadena simples:

 >>> dt = datetime.datetime(2012, 2, 23, 0, 0) >>> '{0.month}/{0.day}/{0.year}'.format(dt) '2/23/2012' >>> '%s/%s/%s' % (dt.month, dt.day, dt.year) '2/23/2012' 

type-specific formatting se puede utilizar:

 t = datetime.datetime(2012, 2, 23, 0, 0) "{:%m/%d/%Y}".format(t) 

Salida:

 '02/23/2012' 

Es posible convertir un objeto datetime en una cadena trabajando directamente con los componentes del objeto datetime.

 from datetime import date myDate = date.today() #print(myDate) would output 2017-05-23 because that is today #reassign the myDate variable to myDate = myDate.month #then you could print(myDate.month) and you would get 5 as an integer dateStr = str(myDate.month)+ "/" + str(myDate.day) + "/" + str(myDate.year) # myDate.month is equal to 5 as an integer, i use str() to change it to a # string I add(+)the "/" so now I have "5/" then myDate.day is 23 as # an integer i change it to a string with str() and it is added to the "5/" # to get "5/23" and then I add another "/" now we have "5/23/" next is the # year which is 2017 as an integer, I use the function str() to change it to # a string and add it to the rest of the string. Now we have "5/23/2017" as # a string. The final line prints the string. print(dateStr) 

Salida -> 5/23/2017

Puede convertir datetime a cadena.

 published_at = "{}".format(self.published_at) 

La concatenación de cadenas, str.join , puede usarse para construir la cadena.

 d = datetime.now() '/'.join(str(x) for x in (d.month, d.day, d.year)) '3/7/2016'