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
datetimepermite 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
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)
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
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
- La clase
datepermite 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)
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)
strftime()convierte una fecha a texto con el formato especificado.strptime()hace lo contrario: convierte una cadena en un objetodatetime.
Estos métodos son esenciales para mostrar o procesar fechas en aplicaciones reales.
Ejemplo 4: 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.")
- Las fechas pueden restarse directamente para obtener un objeto
timedelta, que representa el tiempo transcurrido. - El atributo
.daysdevuelve la cantidad de días completos entre ambas fechas.
2️⃣ Módulo time
El módulo
timepermite 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 condatetime,timeestá más orientado a medir duraciones o realizar temporizaciones precisas.
Debe importarse con:
import time
🟩 Funciones principales
| Función | Descripción | Ejemplo |
|---|---|---|
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
import time
print("Iniciando cuenta regresiva...")
for i in range(5, 0, -1):
print(i)
time.sleep(1)
print("¡Tiempo terminado!")
- 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
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")
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
import time
t_actual = time.time()
print("Timestamp actual:", t_actual)
print("Fecha legible:", time.ctime(t_actual))
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
calendarproporciona 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 comodatetime, resulta útil en programas educativos, de gestión de eventos o planificación.
Debe importarse con:
import calendar
🟩 Funciones principales
| Función | Descripción | Ejemplo de uso | Salida 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. |
- 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
import calendar
print(calendar.month(2025, 10))
- 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
import calendar
for año in range(2020, 2030):
if calendar.isleap(año):
print(año, "es bisiesto")
isleap()devuelveTruesi 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
import calendar
print(calendar.calendar(2025))
- 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ódulo | Propósito principal | Ejemplo representativo |
|---|---|---|
datetime | Gestión de fechas, horas y diferencias temporales. | datetime.datetime.now() |
time | Control de tiempo, pausas y medición de rendimiento. | time.sleep(2) |
calendar | Generació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.