Saltar al contenido principal

Tiempo y Fechas

Python proporciona varios módulos especializados en la gestión y manipulación del tiempo y las fechas. Estas herramientas resultan fundamentales en aplicaciones que requieran registrar eventos, programar tareas, calcular diferencias temporales o mostrar información cronológica en distintos formatos.

Los tres módulos principales que cubren estas necesidades son:

  • datetime: para trabajar con fechas, horas y diferencias entre ellas.
  • time: para medir intervalos y pausar la ejecución de programas.
  • calendar: para generar o analizar calendarios completos.

1️⃣ Módulo datetime​

El módulo datetime permite trabajar con fechas y horas de manera precisa. Proporciona clases y métodos para crear, comparar, formatear y operar con valores temporales. Es el módulo más utilizado cuando se requiere almacenar registros temporales, calcular plazos o programar acciones según la fecha.

Para usarlo, debe importarse así:

import datetime

🟩 Clases principales​

El módulo agrupa varias clases importantes:

  • date → gestiona fechas (año, mes, día).
  • time → gestiona horas (hora, minutos, segundos, microsegundos).
  • datetime → combina fecha y hora.
  • timedelta → representa diferencias entre fechas y horas.

🟦 Ejemplos prácticos​

Ejemplo1: obtener la fecha y hora actual​

Fecha y hora actual
import datetime

ahora = datetime.datetime.now()
print("Fecha y hora actuales:", ahora)
print("Año:", ahora.year)
print("Mes:", ahora.month)
print("Día:", ahora.day)
print("Hora:", ahora.hour)
en este ejemplo

datetime.now() devuelve la fecha y hora actuales del sistema. A través de sus atributos (year, month, day, hour, etc.) se puede acceder a cada componente de forma individual.

Ejemplo 2: creación manual de fechas​

Creación manual de una fecha
import datetime

nacimiento = datetime.date(2000, 10, 15)
print("Fecha de nacimiento:", nacimiento)
print("Año:", nacimiento.year)
print("Día de la semana:", nacimiento.weekday()) # 0 = lunes
en este ejemplo
  • La clase date permite crear fechas específicas indicando año, mes y día.
  • El método weekday() devuelve el día de la semana (0 para lunes, 6 para domingo).

Ejemplo 3: formateo de fechas (strftime y strptime)​

Formateo y conversión de fechas
import datetime

ahora = datetime.datetime.now()
texto = ahora.strftime("%d/%m/%Y %H:%M:%S")
print("Formato legible:", texto)

fecha = datetime.datetime.strptime("25/12/2025 12:30:00", "%d/%m/%Y %H:%M:%S")
print("Objeto datetime:", fecha)
en este ejemplo
  • strftime() convierte una fecha a texto con el formato especificado.
  • strptime() hace lo contrario: convierte una cadena en un objeto datetime.

Estos métodos son esenciales para mostrar o procesar fechas en aplicaciones reales.

Ejemplo 4: cálculo de diferencias entre fechas​

Cálculo de diferencias entre fechas
import datetime

inicio = datetime.date(2025, 1, 1)
hoy = datetime.date.today()
diferencia = hoy - inicio

print(f"Han pasado {diferencia.days} días desde el inicio del año.")
en este ejemplo
  • Las fechas pueden restarse directamente para obtener un objeto timedelta, que representa el tiempo transcurrido.
  • El atributo .days devuelve la cantidad de días completos entre ambas fechas.

2️⃣ Módulo time​

El módulo time permite controlar el flujo temporal de un programa, midiendo intervalos de ejecución, pausando procesos o trabajando con marcas de tiempo del sistema. Aunque comparte algunas funciones con datetime, time está más orientado a medir duraciones o realizar temporizaciones precisas.

Debe importarse con:

import time

🟩 Funciones principales​

FunciónDescripciónEjemplo
time()Devuelve el tiempo actual en segundos desde el 1/1/1970 (Unix timestamp).time.time()
sleep(segundos)Detiene la ejecución del programa durante el tiempo indicado.time.sleep(2)
ctime(segundos)Convierte una marca de tiempo en texto legible.time.ctime(time.time())
localtime(segundos)Devuelve una estructura con fecha y hora local.time.localtime()
perf_counter()Mide tiempo de ejecución de forma precisa (benchmarking).inicio = time.perf_counter()

🟦 Ejemplos prácticos​

Ejemplo 1: pausa de ejecución​

Uso de sleep()
import time

print("Iniciando cuenta regresiva...")
for i in range(5, 0, -1):
print(i)
time.sleep(1)
print("¡Tiempo terminado!")
en este ejemplo
  • La función sleep() detiene la ejecución del programa durante un número determinado de segundos.
  • En este caso, se usa dentro de un bucle para crear una cuenta regresiva animada.

Ejemplo 2: medición de tiempo de ejecución​

Medir el tiempo de ejecución de un bloque
import time

inicio = time.perf_counter()

suma = 0
for i in range(1_000_000):
suma += i

fin = time.perf_counter()
print(f"Tiempo de ejecución: {fin - inicio:.4f} segundos")
en este ejemplo
  • perf_counter() mide el tiempo de forma precisa, ideal para comparar el rendimiento de diferentes fragmentos de código.
  • El resultado se expresa en segundos con gran precisión decimal.

Ejemplo 3: trabajar con marcas de tiempo​

Conversión entre timestamp y fecha
import time

t_actual = time.time()
print("Timestamp actual:", t_actual)
print("Fecha legible:", time.ctime(t_actual))
en este ejemplo
  • time.time() devuelve el número de segundos desde el 1 de enero de 1970 (época Unix).
  • ctime() convierte ese número en una cadena legible con fecha y hora local.

3️⃣ Módulo calendar​

El módulo calendar proporciona funciones para generar calendarios y obtener información sobre fechas y años. Se utiliza principalmente para mostrar calendarios, comprobar días de la semana o detectar años bisiestos. Aunque no es tan usado como datetime, resulta útil en programas educativos, de gestión de eventos o planificación.

Debe importarse con:

import calendar

🟩 Funciones principales​

FunciónDescripciónEjemplo de usoSalida o resultado
calendar.monthrange(año, mes)Devuelve una tupla con el día de la semana del primer día del mes (0 = lunes) y el número total de días del mes.calendar.monthrange(2025, 2)(5, 28) → febrero 2025 empieza en sábado y tiene 28 días.
calendar.month(año, mes)Devuelve una cadena de texto con el calendario mensual formateado.print(calendar.month(2025, 11))Muestra el calendario de noviembre 2025.
calendar.monthcalendar(año, mes)Devuelve una lista de listas con los días del mes organizados por semanas (lunes a domingo).calendar.monthcalendar(2025, 11)[[0,0,0,0,0,1,2], [3,4,5,6,7,8,9], ...]
calendar.calendar(año)Devuelve un calendario anual completo en formato texto.print(calendar.calendar(2025))Muestra el calendario completo de 2025.
calendar.weekday(año, mes, día)Devuelve el día de la semana (0 = lunes, 6 = domingo) para una fecha concreta.calendar.weekday(2025, 11, 7)4 → viernes.
calendar.isleap(año)Devuelve True si el año es bisiesto, False si no lo es.calendar.isleap(2024)True
calendar.leapdays(año1, año2)Devuelve el número de años bisiestos entre dos años (sin incluir el segundo).calendar.leapdays(2000, 2025)6
calendar.day_name[i]Devuelve el nombre del día en inglés (0 = Monday).calendar.day_name[2]'Wednesday'
calendar.month_name[i]Devuelve el nombre del mes en inglés (1 = January).calendar.month_name[11]'November'
calendar.setfirstweekday(n)Cambia el primer día de la semana (0 = lunes, 6 = domingo).calendar.setfirstweekday(6)A partir de entonces, el domingo será el primer día.
Notas útiles
  • Por defecto, Python considera que el lunes (0) es el primer día de la semana.
  • Puedes cambiar el idioma de los nombres de meses y días usando el módulo locale.
  • monthcalendar() es muy útil para recorrer días con estructura semanal, ideal para simulaciones o informes.

🟦 Ejemplos prácticos​

Ejemplo 1: mostrar un calendario mensual​

Mostrar un calendario mensual
import calendar

print(calendar.month(2025, 10))
en este ejemplo
  • La función month() genera un calendario de texto del mes indicado (en este caso, octubre de 2025).
  • El formato imita el de un calendario tradicional, con semanas y días numerados.

Ejemplo 2: detección de años bisiestos​

Comprobación de años bisiestos
import calendar

for año in range(2020, 2030):
if calendar.isleap(año):
print(año, "es bisiesto")
en este ejemplo
  • isleap() devuelve True si el año cumple la regla de los años bisiestos (divisible por 4, salvo excepciones del calendario gregoriano).
  • Este tipo de verificación es útil en cálculos de fechas o planificación anual.

Ejemplo 3: mostrar el calendario completo del año​

Calendario completo del año
import calendar

print(calendar.calendar(2025))
en este ejemplo
  • La función calendar() genera el calendario completo de un año.
  • Este método es útil para mostrar todos los meses juntos o imprimir calendarios personalizados.

📊 Tabla resumen​

MóduloPropósito principalEjemplo representativo
datetimeGestión de fechas, horas y diferencias temporales.datetime.datetime.now()
timeControl de tiempo, pausas y medición de rendimiento.time.sleep(2)
calendarGeneración y análisis de calendarios.calendar.month(2025, 10)

Estos tres módulos constituyen la base para controlar el tiempo y las fechas en Python, ofreciendo desde cálculos sencillos hasta mediciones de rendimiento precisas o generación de calendarios completos. Su comprensión es fundamental en cualquier aplicación que requiera programar, registrar o analizar eventos temporales.