Come calcolare il giorno della settimana per tutti gli anni

January 13

Come calcolare il giorno della settimana per tutti gli anni


Un algoritmo comune per il calcolo del 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 del modulo aritmetica è necessario capire come funziona l'algoritmo, ma chiunque può attuarlo seguendo le istruzioni.

istruzione

1 Preparare gli ingressi. L'algoritmo si aspetta un giorno, mese e anno.

I numeri di Zeller algoritmo mesi da tre a 14, a partire da marzo e termina a febbraio. Ciò garantisce che i giorni bisestili cadono sempre alla fine dell'esercizio, semplificando calcoli.

se il mese <3 poi, mese = mesi + 12

2 Calcolare il secolo e l'anno del secolo. Il secolo per il 1950 dovrebbe essere 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 iniziata.

dayOfWeek = piano (sec / 4) + 5 * secolo

Zeller determinato che questo calcolo, modulo sette, darà il giorno della settimana che ogni secolo iniziato. Il calcolo piano gestisce il fatto che ogni quarto secolo è corta giorno intercalare.

4 Calcolare il giorno della settimana in cui l'anno è iniziato il.

dayOfWeek = dayOfWeek + yearOfCentury + piano (yearOfCentury / 4)

Ogni anno inizia il giorno successivo della settimana rispetto all'anno precedente, fatta eccezione per gli anni bisestili. Questo calcolo, modulo sette, dà il giorno della settimana del primo giorno dell'anno.

5 Trova il giorno della settimana che il mese iniziata.

dayOfWeek = dayOfWeek + piano ((mese + 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 un mese avrà inizio. Si elimina la necessità di tabelle di ricerca per determinare la lunghezza di ogni mese.

6 Aggiungere il giorno del mese e calcolare il giorno della settimana in cui la data cade.

dayOfWeek = dayOfWeek + giorno
dayOfWeek = dayOfWeek 7 mod

7 Convertire la data di ISO standard di data settimana.

ISO data di giorno della settimana-di-settimane iniziano con l'algoritmo Lunedi = 1. di Zeller utilizza Sabato = 0. La conversione utilizza aritmetica semplice modulo.

dayOfWeek = ((giorno_della_settimana + 5) mod 7) + 1

Consigli e avvertenze

  • Questo algoritmo funziona solo per le date gregoriane. Per le date più anziani, sarà necessario un calcolo diverso.