1001Ferramentas
🗓️ Datas

Congruência de Zeller — Dia da Semana

Calcula o dia da semana de qualquer data usando a Congruência de Zeller — algoritmo de 1882 que só requer aritmética modular. Mostra cada etapa do cálculo (q, m, K, J, h) para fins didáticos. Suporta calendário Juliano e Gregoriano.


    
Sobre a Congruência de Zeller

Publicada por Christian Zeller em 1882, a congruência permite computar o dia da semana só com aritmética modular: h = (q + ⌊13(m+1)/5⌋ + K + ⌊K/4⌋ + ⌊J/4⌋ + 5J) mod 7 (Gregoriano). Janeiro e fevereiro são tratados como meses 13 e 14 do ano anterior. Por convenção: 0 = Sábado, 1 = Domingo, ..., 6 = Sexta-feira.

A congruência de Zeller, passo a passo

Christian Zeller publicou nos anos 1880 uma fórmula fechada que devolve o dia da semana de uma data em uma única expressão, sem tabela e sem laço. Ela ainda aparece em código porque é curta e usa só divisão inteira — nada de ponto flutuante, nada de biblioteca de datas. A página mostra cada termo separado, o que serve tanto para conferir uma implementação quanto para entender de onde sai cada número.

O truque que faz a fórmula funcionar é tratar janeiro e fevereiro como os meses 13 e 14 do ano anterior. Com isso o mês de tamanho variável passa a ser o último do ano, e o dia extra do ano bissexto deixa de deslocar todos os meses seguintes. É o mesmo artifício que aparece em quase todo algoritmo de calendário sério, inclusive nos que convertem para dia juliano.

Note que o resultado começa no sábado: a fórmula devolve zero para sábado, um para domingo, e assim por diante. É uma convenção que pega desprevenido quem espera domingo como zero, e a causa mais comum de erro de sete dias em implementações copiadas às pressas. A página aceita também o calendário juliano, que muda dois termos da expressão, e recusa datas que não existem, como 31 de fevereiro.

Perguntas frequentes

Por que a fórmula começa no sábado?
É consequência de como os termos foram arranjados para simplificar a expressão, não uma escolha com significado. Zeller partiu de uma data de referência que caiu em sábado e não normalizou o resultado depois, porque somar uma constante deixaria a fórmula mais longa sem ganho de precisão.
O que muda no calendário juliano?
No gregoriano entram os termos que corrigem os séculos, com a divisão do século por quatro. No juliano todo múltiplo de quatro é bissexto, sem exceção de século, então esses termos dão lugar a uma constante e a um múltiplo do século. A página troca a expressão conforme o calendário escolhido.
Zeller ou Doomsday, para programar?
Zeller, sem dúvida: cabe em uma linha e não precisa de tabela nenhuma. O método de Conway foi desenhado para o cérebro humano, que decora bem e divide mal. Em código, a divisão inteira é barata e a memorização não existe, então a vantagem se inverte.

Ferramentas Relacionadas