¿Qué es el módulo datetime?
Python tiene prácticamente de todo, algo que por supuesto
no le falta, es un módulo dedicado al manejo de fechas y
horas. Se trata de datetime
.
Es un módulo muy extenso, así que nos vamos a centrar en
las partes más importantes para empezar con las fechas y
horas (las clases time
, date
y
datetime
). Cada una de estas clases, tiene
muchos métodos.
Los nombres de las clases
time
,date
ydatetime
, no cumplen la convención de nombres de clase, por retrocompatibilidad.
El término time se traduce al español como tiempo, aunque en el contexto de su uso en Python, podríamos traducirlo también como hora.
Espacio publicitario
Referencia de datetime
La referencia del módulo datetime
, la
encontrarás en esta página:
Importar el módulo datetime de Python
El módulo datetime
de Python, al igual que
math
, ya viene integrado en el lenguaje, de
forma que para importarlo no hay que instalar nada; solo
hacer el import
:
import datetime
La clase time de datetime
Empecemos por la clase time
. Esta clase está
enfocada al manejo de horas en Python.
Al ser time
una clase, para crear datos de
este tipo, estaremos instanciando objetos de tiempo (de
tipo time
).

Crear un objeto time
Podemos crear un objeto de tipo time
de la
siguiente forma:
import datetime
# Se crea un objeto de tipo time
hora = datetime.time()
# Se imprime la hora almacenada
print(hora)
00:00:00
Esto crea un objeto de tipo time
, con un
valor por defecto de 00:00:00
. Si queremos
almacenar una hora en concreto, podemos poner argumentos.
El primero corresponde a la hora, el segundo a los
minutos, el tercero a los segundos y el cuarto a los
microsegundos.
Un microsegundo equivale a una millonésima parte de un segundo.
En el siguiente ejemplo, se construye una hora completa mediante estos argumentos:
import datetime
# Se crea un objeto de tipo time
hora = datetime.time(14, 30, 20, 7577)
# Se imprime la hora almacenada
print(hora)
14:30:20.007577
Si quieres prescindir de los microsegundos, utiliza solo los tres primeros argumentos:
hora = datetime.time(14, 30, 20)
14:30:20
Acceder a los elementos de time por separado
Una de las funcionalidades que tiene este tipo de objeto, es que puedes usar atributos dedicados a devolverte solo una de las partes de la hora.
Espacio publicitario
En cada uno de los siguientes print()
, estoy
accediendo a los atributos mediante un punto, de la misma
forma que hacemos con los atributos de nuestros propios
objetos.
import datetime
# Se crea un objeto de tipo time
hora = datetime.time(14, 30, 20, 656)
# Se imprimen varios de sus atributos
print(f"Hora: {hora.hour}")
print(f"Minutos: {hora.minute}")
print(f"Segundos: {hora.second}")
print(f"Microsegundos: {hora.microsecond}")
Hora: 14
Minutos: 30
Segundos: 20
Microsegundos: 656
En inglés, hora se traduce como hour, minuto como minute, segundo como second y microsegundo como microsecond.
Clase date del módulo datetime
Ahora que ya sabes lo más básico sobre las horas de
Python, es el momento de ver las fechas; para trabajar con
fechas, necesitaremos objetos de tipo date
.

Al siguiente objeto, le pasaremos como primer argumento, el año. Como segundo el mes, y como tercero el día del mes:
import datetime
# Se crea un objeto de tipo date
fecha = datetime.date(2027, 12, 20)
# Se imprime la fecha almacenada
print(fecha)
2027-12-20
Si quieres trabajar con la fecha en elementos separados, puedes usar atributos para hacer referencia a cada valor:
import datetime
#Se crea un objeto de tipo date
fecha = datetime.date(2027,12,20)
#Se imprime la fecha almacenada
print(f"Año: {fecha.year}")
print(f"Mes: {fecha.month}")
print(f"Día: {fecha.day}")
Año: 2027
Mes: 12
Día: 20
En inglés, año se traduce como year, mes como month y día como day.
Espacio publicitario
Obtener la fecha actual

Con Python puedes obtener la fecha actual en el momento de
ejecutar el programa. Esto es posible con el método
today()
de la clase date
, del
módulo datetime
:
import datetime
#Se crea un objeto de tipo date y se obtiene la fecha del día
fecha_hoy = datetime.date.today()
#Se imprime la fecha almacenada
print(fecha_hoy)
2024-02-27
Obtener la hora actual
Para obtener la hora actual, junto con la fecha actual,
necesitamos utilizar el método now()
de la
clase datetime
, del módulo
datetime
:
import datetime
# Se obtiene la hora y fecha en la ejecución
hora_actual = datetime.datetime.now()
# Se imprime la hora y fecha almacenadas
print(hora_actual)
2024-02-27 15:56:56.796555
De esta fecha y hora en conjunto, puedes extraer los
atributos que necesites. Por ejemplo, quieres solo la
hora, utiliza el atributo hour
tal y como he
mostrado más arriba. ¿Quieres el día? Pues usa
day
. Lo mismo con el resto.
También tenemos una serie de códigos de formateo de fechas, con los que podemos obtener en una cadena de caracteres las partes que nos interesen.
Espacio publicitario
A continuación, tienes el listado de códigos que puedes utilizar, su significado, y un ejemplo de uso. En uno de los próximos ejemplos, verás cómo usarlos.
Código | Significado | Ejemplo de uso |
---|---|---|
%a |
Nombre abreviado del día de la semana. | Fry, Sat |
%A |
Día entero de la semana. | Fryday, Saturday |
%w |
Día de la semana (numérico) 0 - domingo. | 0, 1, 2, 3, 4, 5, 6 |
%d |
Día del mes con el prefijo 0 (solo del 01 al 09, el resto es 10, 11, 12…). | 01, 02, 03 … 10, 11, 12… |
%b |
Nombre del mes abreviado. | Dec, Jan, Feb |
%m |
Mes del año (numérico) con el prefijo 0 hasta el mes 09. | 01, 02, 03 … 10, 11, 12 |
%B |
Nombre del mes entero. | December, January, … |
%y |
Número del año abreviado a dos dígitos. | 00, 01, 02, … 98, 99 |
%Y |
Número del año completo. | 2021, 2022, 2023 … |
%H |
Hora de 01 a 24. | 01, 02, 03 … 23, 24 |
%I |
Hora de 01 a 12. | 01, 02, 03, … 10, 11, 12 |
%p |
AM - PM | AM, PM |
%M |
Minutos con el prefijo 0 del 00 al 09. | 00, 01, 02, … 58, 59 |
%S |
Segundos con el prefijo 0 del 00 al 09. | 00, 01, 02, … 58, 59 |
%f |
Microsegundos con ceros a la izquierda. | 000000, 999999 |
%z |
Compensación UTC en la forma HHMM o -HHMM (hay que utilizar un argumento especial para que aparezca: tzinfo=datetime.timezone.utc). | +0000 |
%Z |
Nombre de la zona horaria (hay que utilizar un argumento especial para que aparezca: tzinfo=datetime.timezone.utc). | UTC |
%j |
Número del día del año con ceros a la izquierda. | 001, 365 |
%U |
Número de semana del año (empezando por el domingo). | 00, 01, 02, … 51, 52 … |
%W |
Número de semana del año. | 00, 01, 02, … 51, 52 |
%c |
Representación larga de fecha y hora apropiada de la localidad. | Sat Dec 24 09:26:53 2022 |
%X |
Representación de hora apropiada de la localidad. | 10:03:43 |
El método strftime()
Tenemos la siguiente fecha actual:
from datetime import datetime
fecha_actual = datetime.now()
print(fecha_actual)
2024-02-27 16:15:06.755516
Si la queremos formatear de una forma más elegante, podemos hacer algo como esto:
Tuesday, 27th February 2024
Para conseguir este resultado puedes utilizar el método
strftime()
, para poder formatear los
resultados que nos da el objeto de fecha.
Espacio publicitario
Este método te permite ir utilizando los diferentes códigos de formateo de la tabla anterior.
Aquí tienes el ejemplo de como se haría para dejar la fecha igual que en la frase del ejemplo:
from datetime import datetime
fecha_actual = datetime.now()
# Formatear la fecha
fecha_formateada = fecha_actual.strftime("%A, %dth %B %Y")
print(fecha_formateada)
Tuesday, 27th February 2024
Como puedes ver, simplemente tienes que crear como argumento del método, una cadena de caracteres que envuelva todos los códigos que desees. Todo se irá formateando automáticamente.
Cambiar las fechas de Python a español

Las fechas en inglés que vienen por defecto con Python, están muy bien, pero si estamos desarrollando algo en español, lo más normal sería que las fechas aparecieran formateadas en español. De modo, que pasemos a ver una forma de traducirlas.
El módulo locale
Lo primero es importar el módulo locale
de
Python:
import locale
¿Para qué sirve el módulo locale?
El módulo locale
es un módulo que permite a
las aplicaciones adaptar su comportamiento y presentación,
a la configuración regional y de idioma del sistema. Esto
incluye la representación de fechas, números, monedas,
codificación de caracteres, etc.
Espacio publicitario
Probemos a establecer el idioma en español:
import locale
# Establece el idioma a español
locale.setlocale(locale.LC_ALL, "es")
Esto mismo, lo puedes precisar más con el español de un país concreto, por ejemplo, si escribo una aplicación para España, le puedo poner esto:
locale.setlocale(locale.LC_ALL, "es_ES")
Para México esto:
locale.setlocale(locale.LC_ALL, "es_MX")
Lo mismo con cualquier otro país. Solo tienes que cambiar el código de país.
La parte importante, para que esté en español, es el
"es"
, en minúsculas.
El ejemplo completo quedará así:
import datetime
import locale
# Establece el idioma a español
locale.setlocale(locale.LC_ALL, "es")
# Crea un objeto datetime con la fecha y hora actual
fecha_ahora = datetime.datetime.now()
# Formateamos la fecha y hora
fecha_formateada = fecha_ahora.strftime("%A, %d de %B de %Y a las %H:%M").capitalize()
print(fecha_formateada)
Martes, 27 de febrero de 2024 a las 16:24
Primero cambiamos el idioma y luego, ya podemos formatear las fechas a nuestro gusto, ya que vendrán en español.
Espacio publicitario
Espacio publicitario
Ejercicios de Python para resolver
61. Crea un objeto de tipo fecha, e imprime la fecha actual en español. Qué aparezca formateada así:
Hoy es día 27 de febrero de 2024. Son las 16 horas y 27 minutos.
Recuerda que tiene que salirte tu fecha actual, no la que ves aquí escrita.
Para resolver este ejercicio, tenías que utilizar la tabla de códigos de formateo para fechas y traducirla al español.
Recuerda que se tiene que imprimir tu fecha actual, y no la que te muestro yo en esta salida de consola, de este ejemplo.
import datetime
import locale
# Establecer el idioma a español
locale.setlocale(locale.LC_ALL, "es")
# Crear un objeto datetime con la fecha y hora actual
fecha_ahora = datetime.datetime.now()
# Formatear la fecha y hora actual según el formato deseado
fecha_formateada = fecha_ahora.strftime("Hoy es día %d de %B de %Y. Son las %H horas y %M minutos.")
print(fecha_formateada)
Hoy es día 27 de febrero de 2024. Son las 16 horas y 27 minutos.
62. Crea una clase llamada Usuario
, que tenga
los siguientes miembros:
Atributos:
nombre
apellidos
fecha_ultimo_login
Métodos:
-
leer_info()
: muestra el nombre y apellidos del usuario. -
ultimo_login()
: simula hacer un login (inicio de sesión).
ultimo_login()
, no tendrá la lógica para iniciar sesión en ningún lado, simplemente mostrará esta frase, sustituyendo los valores entre llaves, por los valores de los atributos:
Cuando tengas la clase hecha, crea un objeto cualquiera con el que probar los dos métodos.
El ejercicio era libre en cuanto a presentación de los
datos en la consola, excepto en el método
ultimo_login()
, que tenía que sacar la
frase formateada tal y como se solicita en el
enunciado.
import datetime
class Usuario:
def __init__(self, nombre, apellidos):
self.nombre = nombre
self.apellidos = apellidos
self.fecha_ultimo_login = datetime.datetime.now()
def leer_info(self):
print(f"Nombre: {self.nombre}")
print(f"Apellidos: {self.apellidos}")
def ultimo_login(self):
self.fecha_ultimo_login = datetime.datetime.now()
print(f"El usuario {self.nombre} inició sesión por última vez a las {self.fecha_ultimo_login}.")
# Ejemplo de uso de la clase Usuario
usuario1 = Usuario("Enrique", "Barros Fernández")
usuario1.leer_info()
usuario1.ultimo_login()
Nombre: Enrique
Apellidos: Barros Fernández
El usuario Enrique inició sesión por última vez a las 2024-02-27 16:34:13.814280.
Cada vez que simules hacer el inicio de sesión llamando al método, verás que la fecha y hora del objeto, se actualiza al momento de ejecutar el método.
Este programa, si estuviera conectado a una base de datos, para hacer un inicio de sesión real, se haría una actualización en la base de datos, guardando cada vez esta fecha y hora, dejando así un posible registro del último inicio de sesión, o incluso, un historial completo con todos los que ha ido realizando el usuario.
Espacio publicitario