Aquí te traigo un post de mucha ayuda que suelo utilizar frecuentemente en mis desarrollos. Sí, ya te he comentado en otras ocasiones que manipular fechas, horas y cadenas es una tarea muy común en todo proyecto. Lo que aprenderás en este post es algo muy concreto: cómo convertir un objeto datetime, date, o time en string.
Cómo convertir un objeto datetime, date o time a string
Para convertir una fecha a string
tienes que hacer uso del método strftime()
de las clases datetime
, date
o time
. Este método devuelve la representación de la fecha/hora como una cadena con un formato específico. El formato de la cadena de salida se pasa como argumento al método y se define a partir de unos códigos de formato que te enseñaré más adelante. Antes, veamos unos ejemplos.
Ejemplo 1. Transformar un objeto datetime en string
En el ejemplo siguiente se crea un objeto de tipo datetime
y a partir de él se obtienen distintas representaciones de tipo string
con diferentes formatos. Recuerda importar el módulo datetime
. La fecha de ejemplo es el 3 de enero de 2020 a las 8 horas.
import datetime # Creamos un objeto datetime una_fecha = datetime.datetime(2020, 1, 3, 8, 0) # Convertimos el objeto datetime a string con formato <día>/<mes>/<año> f1_str = una_fecha.strftime('%d/%m/%Y') print(f1_str) > 03/01/2020 # Convertimos el objeto datetime a string con formato <día>-<mes>-<año> f2_str = una_fecha.strftime('%d-%m-%Y') print(f2_str) > 03-01-2020 # Convertimos el objeto datetime a string # con formato <hora>:<minutos>:<segundos> hora_str = una_fecha.strftime('%H:%M:%S') print(hora_str) > 08:00:00 # Convertimos el objeto datetime a string uniendo todo lo anterior fecha_hora_str = una_fecha.strftime('%d/%m/%Y %H:%M') print(fecha_hora_str) > 03/01/2020 08:00
Ejemplo 2. Convertir un objeto date en string
Tomando como base el objeto una_fecha
del ejemplo anterior, vamos a pasar su objeto date
a string
.
# Convertimos el objeto date a string con formato <día> de <mes> de <año> solo_fecha = una_fecha.date() solo_fecha_str = solo_fecha.strftime('%d de %m de %Y') print(solo_fecha_str) > 03 de 01 de 2020
Sé lo que estás pensando… ¿Qué ocurre si tratas de obtener la hora o minutos de un objeto date
? Pues Python les asigna por defecto el valor 0
.
solo_hora_str = solo_fecha.strftime('%H:%M') print(solo_hora_str) > 00:00
Ejemplo 3. Convertir un objeto time en string
De nuevo tomaremos como base el objeto una_fecha
para convertir su objeto time
a string
.
# Convertimos el objeto time a string con formato <hora>:<minutos>:<segundos> solo_hora = una_fecha.time() solo_hora_str = solo_hora.strftime('%H:%M:%S') print(solo_hora_str) > 08:00:00
Si tratamos de obtener la fecha de un objeto time
, veremos que Python le asigna por defecto el día 1 de enero de 1900.
solo_fecha_str = solo_hora.strftime('%d/%m/%Y') print(solo_fecha_str) > 01/01/1900
¡OJO! También te puede interesar Cómo convertir un string en fecha
Códigos de formato
A continuación se muestran los códigos de formato válidos para aquellas plataformas con una implementación estándar de C.
Directiva | Significado | Ejemplo |
%a | Nombre abreviado del día de la semana | Sun, Mon, … |
%A | Nombre completo del día de la semana | Sunday, Monday, … |
%w | Día de la semana como número decimal (domingo es 0) | 0, 1, …, 6 |
%d | Día del mes como número decimal (añade cero delante) | 01, 02, …, 31 |
%-d | Día del mes como número decimal | 1, 2, …, 30 |
%b | Nombre del mes abreviado | Jan, Feb, …, Dec |
%B | Nombre del mes completo. | January, February, … |
%m | Mes como número decimal (añade cero delante) | 01, 02, …, 12 |
%-m | Mes como número decimal | 1, 2, …, 12 |
%y | Año sin siglo como número decimal (añade cero delante) | 00, 01, …, 99 |
%-y | Año sin siglo como número decimal | 0, 1, …, 99 |
%Y | Año con siglo como número decimal | 2013, 2019 etc. |
%H | Hora (24 horas) como número decimal (añade cero delante) | 00, 01, …, 23 |
%-H | Hora (24 horas) como número decimal | 0, 1, …, 23 |
%I | Hora (12 horas) como número decimal (añade cero delante) | 01, 02, …, 12 |
%-I | Hora (12 horas) como número decimal | 1, 2, … 12 |
%p | AM o PM locales | AM, PM |
%M | Minuto como número decimal (añade cero delante) | 00, 01, …, 59 |
%-M | Minuto como número decimal | 0, 1, …, 59 |
%S | Segundo como número decimal (añade cero delante) | 00, 01, …, 59 |
%-S | Segundo como número decimal | 0, 1, …, 59 |
%f | Microsegundos como número decimal (añade ceros delante) | 000000 – 999999 |
%z | Compensación UTC con formato +HHMM o -HHMM | |
%Z | Nombre de la zona horaria | |
%j | Día del año como número decimal (añade cero delante) | 001, 002, …, 366 |
%-j | Día del año como número decimal | 1, 2, …, 366 |
%U | Número de semana del año (domingo como primer día de la semana). Los días de un nuevo año anteriores al primer domingo se consideran en la semana 0. | 00, 01, …, 53 |
%W | Número de semana del año (lunes como primer día de la semana). Los días de un nuevo año anteriores al primer lunes se consideran en la semana 0. | 00, 01, …, 53 |
%c | Representación apropiada de fecha y hora local | Mon Sep 30 07:06:05 2013 |
%x | Representación apropiada de fecha local | 09/30/13 |
%X | Representación apropiada de hora local | 07:06:05 |
%% | El carácter ‘%’ literal | % |