Congruência de Zeller

Origem: Wikipédia, a enciclopédia livre.
Ir para: navegação, pesquisa

Congruência de Zeller é um algoritmo criado por Christian Zeller para calcular o dia da semana de qualquer data nos calendários juliano ou gregoriano.

Fórmula[editar | editar código-fonte]

Para um calendário gregoriano, a congruência de Zeller é

h = \left(q + \left\lfloor\frac{(m+1)26}{10}\right\rfloor + K + \left\lfloor\frac{K}{4}\right\rfloor + \left\lfloor\frac{J}{4}\right\rfloor - 2J\right) \mod 7,

Já para o calendário juliano, ela é

h = \left(q + \left\lfloor\frac{(m+1) 26}{10}\right\rfloor + K + \left\lfloor\frac{K}{4}\right\rfloor + 5 - J\right) \mod 7,

em que

  • h é o dia da semana (0 = sábado, 1 = domingo, 2 = segunda, …)
  • q é o dia do mês
  • m é o mês (3 = março, 4 = abril, 5 = maio, …)
  • K é o ano do século (ano \mod 100)
  • J é o século (\lfloor ano/100 \rfloor) (por exemplo, para 1995 o século seria 19, ainda que na realidade o século seria XX)

Nota 1: neste algoritmo, janeiro e fevereiro são contados como os meses 13 e 14 do ano anterior.

Nota 2: para o dia do mês em ISO (1 = segunda, …), use d = ((h + 5) \mod 7) + 1

Implementação em software[editar | editar código-fonte]

As fórmulas anteriores requerem a definição matemática da operação módulo, que significa que -2 \mod 7 = +5. Entretanto, a maioria das linguagens de programação implementam a função de resto, de forma que -2 \mod 7 = -2. Portanto, para implementar a congruência de Zeller em um computador, as fórmulas devem ser alteradas para assegurar um numerador positivo. A forma mais simples de se fazer isso é substituir -2J por +5J e -J por +6J. Assim, as fórmulas se tornam:

h = \left(q + \left\lfloor\frac{(m+1)26}{10}\right\rfloor + K + \left\lfloor\frac{K}{4}\right\rfloor + \left\lfloor\frac{J}{4}\right\rfloor + 5J\right) \mod 7,

para o calendário gregoriano e

h = \left(q + \left\lfloor\frac{(m+1) 26}{10}\right\rfloor + K + \left\lfloor\frac{K}{4}\right\rfloor + 5 + 6J\right) \mod 7,

para o calendário juliano.

Zeller usava aritmética decimal, e achou conveniente usar J & K para representar o ano. Mas usando um computador é mais simples lidar com o ano modificado Y usando Y, Y div 4, e para o calendário gregoriano também Y div 100 & Y div 400.

Ver também[editar | editar código-fonte]