Módulo Calendar de Python: Guía Experta con Ejemplos de Código
El módulo integrado calendar de Python ofrece potentes herramientas para trabajar con fechas, meses y años. Aprovechando clases como TextCalendar y HTMLCalendar, los desarrolladores pueden crear calendarios imprimibles o web-friendly, iterar a través de días e incluso calcular reglas de scheduling personalizadas.
A continuación, un recorrido paso a paso de los casos de uso más comunes, completo con snippets de código listos para ejecutar para Python 2 y Python 3.
Paso 1 – Generar un Calendario de Texto
Ejecuta el siguiente script para ver un calendario de texto plano para Enero 2025, comenzando la semana en Jueves:

- Línea 1:
import calendarcarga el módulo. - Línea 3:
c = calendar.TextCalendar(calendar.THURSDAY)crea objeto calendario cuyas semanas empiezan en jueves. - Línea 4:
txt = c.formatmonth(2025, 1)formatea el mes de Enero 2025. - Línea 5:
print(txt)imprime el calendario.
Cambia el día de inicio a Domingo para verificar flexibilidad:

Paso 2 – Renderizar un Calendario HTML
Para aplicaciones web, HTMLCalendar puede generar una tabla HTML completa que puede estilizarse con CSS:

Paso 3 – Iterar Sobre Días de un Mes
El método itermonthdays produce todos los días del mes, incluyendo ceros de padding para días que pertenecen a meses adyacentes. Esto es útil para alinear calendarios:

- Los ceros indican slots que caen fuera del mes objetivo.
- Ayudan a determinar en qué semana empieza y termina el mes.
Paso 4 – Obtener Nombres Locale-Aware
Python honra automáticamente el locale del sistema para nombres de meses y días. Abajo, salida de ejemplo al imprimir calendar.month_name y calendar.day_name:

La configuración de locale varía por máquina, así que resultados pueden diferir para usuarios en otros países.
Paso 5 – Calcular Fechas Personalizadas (ej. Primer Lunes de Cada Mes)
Abajo, script conciso que encuentra el primer lunes de cada mes en 2025:

La lógica usa calendar.monthcalendar para obtener matriz de semanas, luego verifica las primeras dos semanas por valor de lunes no-cero.
Ejemplo Python 2
import calendar
# Crear calendario texto plano
c = calendar.TextCalendar(calendar.THURSDAY)
text = c.formatmonth(2025, 1)
print text
# Crear calendario HTML formateado
hc = calendar.HTMLCalendar(calendar.THURSDAY)
html = hc.formatmonth(2025, 1)
print html
# Iterar sobre días de un mes
for i in c.itermonthdays(2025, 4):
print i
# Nombres locale-aware de meses y días
for name in calendar.month_name:
print name
for day in calendar.day_name:
print day
# Encontrar primer lunes de cada mes
for month in range(1, 13):
mycal = calendar.monthcalendar(2025, month)
week1 = mycal[0]
week2 = mycal[1]
if week1[calendar.MONDAY] != 0:
auditday = week1[calendar.MONDAY]
else:
auditday = week2[calendar.MONDAY]
print "%10s %2d" % (calendar.month_name[month], auditday)
Ejemplo Python 3
import calendar
# Crear calendario texto plano
c = calendar.TextCalendar(calendar.THURSDAY)
text = c.formatmonth(2025, 1)
print(text)
# Crear calendario HTML formateado
hc = calendar.HTMLCalendar(calendar.THURSDAY)
html = hc.formatmonth(2025, 1)
print(html)
# Iterar sobre días de un mes
for i in c.itermonthdays(2025, 4):
print(i)
# Nombres locale-aware de meses y días
for name in calendar.month_name:
print(name)
for day in calendar.day_name:
print(day)
# Encontrar primer lunes de cada mes
for month in range(1, 13):
mycal = calendar.monthcalendar(2025, month)
week1 = mycal[0]
week2 = mycal[1]
if week1[calendar.MONDAY] != 0:
auditday = week1[calendar.MONDAY]
else:
auditday = week2[calendar.MONDAY]
print("%10s %2d" % (calendar.month_name[month], auditday))
Conclusión
- Personaliza día de inicio de semana y formatos con
TextCalendaryHTMLCalendar. - Usa
itermonthdayspara layouts precisos de calendario, manejando ceros de padding. - Datos de locale disponibles automáticamente vía
calendar.month_nameycalendar.day_name. - Calcula fechas basadas en reglas (ej. primer lunes) usando
calendar.monthcalendary lógica simple.
python
- Clases Abstractas en C#: Tutorial Práctico con Ejemplos de Código
- Domine el Método strip() de Python: Guía Completa y Ejemplos Prácticos
- Domine str.count() en Python: Cómo Contar Caracteres y Subcadenas con Ejemplos
- Función round() en Python explicada con ejemplos prácticos
- Dominando la función map() de Python: sintaxis, ejemplos y mejores prácticas
- Python timeit(): medición de tiempo de ejecución con ejemplos prácticos
- Dominando yield en Python: Generadores vs Return – Guía práctica
- Counter de collections en Python: conteo eficiente, actualización y operaciones aritméticas
- Python list.count(): Guía Experta con Ejemplos Prácticos
- Python list.index(): Cómo Encontrar Posiciones de Elementos con Ejemplos Prácticos
- Programación de Extensiones en Python con C: Crea Módulos Nativos Rápidos