Um algoritmo comum para calcular o dia da semana de uma data específica é o algoritmo de Zeller . O algoritmo foi publicado em 1882 e concebido para ser trabalhada à mão , mas pode ser facilmente implementado em software . Algoritmo funciona da Zeller por encontrar o dia da semana, o século começou , em seguida, construir a partir daí , adicionando anos, meses e dias. Uma boa compreensão da aritmética modulo é necessário entender como o algoritmo funciona, mas qualquer um pode implementá-lo , seguindo as instruções . Instruções
1
Prepare os insumos. O algoritmo espera um dia, mês e ano. Algoritmo números
do Zeller os meses de três a 14 , começando com março e terminando com fevereiro. Isso garante que os dias bissextos sempre caem no final do ano , o que simplifica os cálculos .
Se mês <3 então , mês = mês + 12
2
Calcule o século eo ano do século . O século em 1950 deve ser de 19 , mesmo que cai no século XX .
Século = floor (ano /100) yearOfCentury = ano mod 100
3
Encontre o dia da semana em que o século começou .
dayOfWeek = andar ( século /4) + 5 * século
Zeller determinou que este cálculo , módulo sete, vai dar o dia da semana que qualquer dado século começou . O cálculo chão lida com o fato de que cada quarto século é curto um dia bissexto.
4
Calcule o dia da semana em que o ano começou em .
DayOfWeek = dayOfWeek + + yearOfCentury andar ( yearOfCentury /4)
Todo ano começa no próximo dia da semana do que no ano anterior, exceto para os anos bissextos . Este cálculo , módulo sete, dá o dia da semana do primeiro dia do ano.
5
Encontre o dia da semana que o mês começou por diante.
DayOfWeek = dayOfWeek + floor ( (mês + 1) * 26) /10)
Este é o coração do algoritmo de Zeller . Zeller observou que este cálculo é capaz de determinar em que dia da semana por mês vai começar. Ele elimina a necessidade de tabelas de pesquisa para determinar o comprimento de cada mês.
6
Adicione o dia do mês e calcular o dia da semana em que a data cai.
DayOfWeek = dayOfWeek + daydayOfWeek = dayOfWeek mod 7
7
converter a data para as normas ISO data semana . data semana
ISO dia da semana começa com segunda-feira = 1. Algoritmo do Zeller usa sábado = 0. A conversão usa simples aritmética modulo .
DayOfWeek = (( dayOfWeek + 5) mod 7 ) + 1