Un algoritmo comune per calcolare il giorno della settimana di una data particolare, è l'algoritmo di Zeller . L'algoritmo è stato pubblicato nel 1882 e progettato per essere lavorato a mano, ma può essere facilmente implementato in software . L'algoritmo di Zeller funziona trovando il giorno della settimana del secolo iniziò , poi costruire da lì con l'aggiunta di anni, mesi e giorni. Una buona comprensione di aritmetica modulare è necessario capire come funziona l'algoritmo , ma chiunque può applicare l'adesivo seguendo le istruzioni . Istruzioni
1
Preparare gli ingressi . L'algoritmo si aspetta un giorno , mese e anno . Numeri algoritmo
di Zeller i mesi da tre a 14 , a partire da marzo e termina a febbraio . Questo garantisce che i giorni bisestili cadono sempre alla fine dell'anno , semplificando i calcoli .
Mese < 3 allora , mese = mese + 12
2
Calcolare il secolo e il anno del secolo . Il secolo, per il 1950 dovrebbe essere di 19 , anche se cade nel ventesimo secolo .
Secolo = piano ( anno /100 ) yearOfCentury = anno mod 100
3
Trova il giorno della settimana in cui il secolo iniziato .
dayOfWeek = piano ( sec /4) + 5 * secolo
Zeller ha determinato che questo calcolo , modulo sette , darà il giorno della settimana che ogni secolo ha iniziato . Il calcolo piano gestisce il fatto che ogni quarto secolo è corta giorno intercalare .
4
Calcola il giorno della settimana che l'anno è iniziato il .
DayOfWeek = dayOfWeek yearOfCentury + + piano ( yearOfCentury /4 ) per
Ogni anno inizia il giorno successivo della settimana rispetto all'anno precedente , tranne che per gli anni bisestili . Questo calcolo , modulo sette , dà il giorno della settimana del primo giorno dell'anno .
5
trovare il giorno della settimana in cui il mese è iniziato il .
DayOfWeek = dayOfWeek + piano ( ( mese + 1) * 26 ) /10 ) per
Questo è il cuore dell'algoritmo di Zeller . Zeller ha osservato che questo calcolo è in grado di determinare in quale giorno della settimana avrà inizio un mese . Si elimina la necessità di tabelle di ricerca per determinare la lunghezza di ogni mese .
6
Aggiungi il giorno del mese e calcolare il giorno della settimana in cui cade la data .
DayOfWeek = dayOfWeek + daydayOfWeek = dayOfWeek mod 7 foto Il 7
convertire la data di norme setti ISO .
ISO data settimana del giorno della settimana inizia con Lunedi = 1 . L'algoritmo di Zeller usa Sabato = 0 . La conversione utilizza l'aritmetica semplice modulo .
DayOfWeek = ( ( dayOfWeek + 5) mod 7) + 1