Módulo Calendar do Python: Guia Especializado com Exemplos de Código
O módulo embutido calendar do Python oferece ferramentas poderosas para trabalhar com datas, meses e anos. Aproveitando classes como TextCalendar e HTMLCalendar, desenvolvedores podem criar calendários imprimíveis ou amigáveis para web, iterar através de dias e até calcular regras de agendamento personalizadas.
Abaixo está um passo a passo dos casos de uso mais comuns, completo com snippets de código prontos para executar para Python 2 e Python 3.
Passo 1 – Gerar um Calendário em Texto
Execute o script a seguir para ver um calendário em texto plano para Janeiro 2025, iniciando a semana na Quinta-feira:

- Linha 1:
import calendarcarrega o módulo. - Linha 3:
c = calendar.TextCalendar(calendar.THURSDAY)cria objeto de calendário cujas semanas começam na Quinta-feira. - Linha 4:
txt = c.formatmonth(2025, 1)formata o mês de Janeiro 2025. - Linha 5:
print(txt)exibe o calendário.
Mude o dia inicial para Domingo para verificar a flexibilidade:

Passo 2 – Renderizar um Calendário HTML
Para aplicações web, HTMLCalendar pode gerar uma tabela HTML completa que pode ser estilizada com CSS:

Passo 3 – Iterar sobre Dias de um Mês
O método itermonthdays rende todos os dias do mês, incluindo zeros de preenchimento para dias que pertencem a meses adjacentes. Isso é útil para alinhar calendários:

- Zeros indicam slots que caem fora do mês alvo.
- Ajudam a determinar em qual semana o mês começa e termina.
Passo 4 – Recuperar Nomes Locale-Aware
Python honra automaticamente o locale do sistema para nomes de meses e dias da semana. Abaixo está uma saída de exemplo ao imprimir calendar.month_name e calendar.day_name:

Configurações de locale variam por máquina, então resultados podem diferir para usuários em outros países.
Passo 5 – Calcular Datas Personalizadas (ex: Primeira Segunda-feira de Cada Mês)
Abaixo está um script conciso que encontra a primeira Segunda-feira de cada mês em 2025:

A lógica usa calendar.monthcalendar para obter uma matriz de semanas, então verifica as duas primeiras semanas por um valor de Segunda-feira não-zero.
Exemplo Python 2
import calendar
# Create a plain text calendar
c = calendar.TextCalendar(calendar.THURSDAY)
text = c.formatmonth(2025, 1)
print text
# Create an HTML formatted calendar
hc = calendar.HTMLCalendar(calendar.THURSDAY)
html = hc.formatmonth(2025, 1)
print html
# Loop over the days of a month
for i in c.itermonthdays(2025, 4):
print i
# Locale-aware names of months and days
for name in calendar.month_name:
print name
for day in calendar.day_name:
print day
# Find the first Monday of each month
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)
Exemplo Python 3
import calendar
# Create a plain text calendar
c = calendar.TextCalendar(calendar.THURSDAY)
text = c.formatmonth(2025, 1)
print(text)
# Create an HTML formatted calendar
hc = calendar.HTMLCalendar(calendar.THURSDAY)
html = hc.formatmonth(2025, 1)
print(html)
# Loop over the days of a month
for i in c.itermonthdays(2025, 4):
print(i)
# Locale-aware names of months and days
for name in calendar.month_name:
print(name)
for day in calendar.day_name:
print(day)
# Find the first Monday of each month
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))
Conclusão
- Personalize dias de início de semana e formatos com
TextCalendareHTMLCalendar. - Use
itermonthdayspara layouts precisos de calendário, lidando com zeros de preenchimento. - Dados de locale estão automaticamente disponíveis via
calendar.month_nameecalendar.day_name. - Calcule datas baseadas em regras (ex: primeira Segunda-feira) usando
calendar.monthcalendare lógica simples.
python
- Classes Abstratas em C#: Tutorial Prático com Exemplos de Código
- Dominando o Método strip() do Python: Guia Completo e Exemplos Práticos
- Domine o str.count() do Python: Como Contar Caracteres e Substrings com Exemplos
- Função round() em Python Explicada com Exemplos Práticos
- Dominando a Função map() do Python: Sintaxe, Exemplos e Boas Práticas
- Python timeit(): Medindo Tempo de Execução com Exemplos Práticos
- Dominando o yield do Python: Generator vs Return – Guia Prático
- Counter do Python em collections: Contagem Eficiente, Atualização e Operações Aritméticas
- Python list.count(): Guia Especializado com Exemplos Práticos
- Python List index(): Como Encontrar Posições de Elementos com Exemplos Práticos