Un comune per calcolare il giorno della settimana di una data particolare è algoritmo di Zeller. L'algoritmo è stato pubblicato nel 1882 e progettato per essere lavorato a mano, ma può essere facilmente implementato nel software. Algoritmo di Zeller funziona trovando il giorno della settimana al secolo iniziato, quindi costruire da lì con l'aggiunta di anni, mesi e giorni. Una buona comprensione del modulo aritmetico è necessaria capire come funziona l'algoritmo, ma chiunque può realizzare seguendo le istruzioni.
Istruzioni
1
Preparare gli ingressi. L'algoritmo prevede che un giorno, mese e anno.
Algoritmo di Zeller numera i mesi da tre a 14, a partire da marzo e termina con febbraio. Questo garantisce che il salto giorni sempre cadano alla fine dell'anno, semplificando i calcoli.
Se mese < 3 quindi, mese = mese + 12
2
Calcolare il secolo e l'anno del secolo. Il secolo per 1950 dovrebbe essere 19, anche se cade nel ventesimo secolo.
secolo = floor(year / 100)
yearOfCentury = anno mod 100
3
Trovare il giorno della settimana in cui ha cominciato il secolo.
dayOfWeek = floor(century/4) + 5 * secolo
Zeller determinato che questo calcolo, modulo sette, darà il giorno della settimana che qualsiasi dato secolo iniziato. Il calcolo del piano gestisce il fatto che ogni quarto secolo è breve un salto giorno.
4
Calcolare il giorno della settimana che ha avuto inizio l'anno.
dayOfWeek = dayOfWeek + yearOfCentury + floor(yearOfCentury/4)
Ogni anno inizia il giorno successivo della settimana rispetto l'anno precedente, fatta eccezione per gli anni bisestili. Questo calcolo, modulo sette, dà il giorno della settimana del primo giorno dell'anno.
5
Trovare il giorno della settimana che il mese iniziato su.
dayOfWeek = dayOfWeek + piano ((month + 1) * 26) / 10)
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. Elimina la necessità per le tabelle di ricerca determinare la lunghezza di ogni mese.
6
Aggiungere il giorno del mese e calcolare il giorno della settimana in cui cade la data.
dayOfWeek = dayOfWeek + giorno
dayOfWeek = dayOfWeek mod 7
7
Convertire la data in standard ISO settimana data.
Settimana ISO data giorno-della-settimana inizia con lunedì = 1. Algoritmo di Zeller utilizza sabato = 0. La conversione utilizza semplice modulo aritmetico.
dayOfWeek = ((dayOfWeek + 5) mod 7) + 1
Consigli & Avvertenze
- Questo algoritmo funziona solo per date gregoriane. Per date precedenti, sarà necessario un calcolo diverso.