Come calcolare il giorno della settimana di qualsiasi anno

Passaggio 1

Preparare le informazioni. Per eseguire l'algoritmo è necessario specificare un giorno, un mese e un anno. Questo elenca i mesi da tre a 14, inizia con marzo e termina a febbraio. Ciò garantisce che i giorni bisestili cadano sempre alla fine dell'anno, il che semplifica i calcoli: se il mese <3 allora, mese = mese + 12.

Passaggio 2

Calcola il secolo e l'anno. Gli anni '50 devono essere 19, nonostante il fatto che questa cifra riconosca il ventesimo secolo: secolo = base (anno / 100) = annoSiglo = anno mod 100.

Passaggio 3

Trova il giorno della settimana in cui è iniziato il secolo: Weekday = base (secolo / 4) + 5 * secolo. Zeller ha determinato che questo calcolo, del modulo sette, darà il giorno della settimana in cui è iniziato ogni secolo. Il calcolo di base considera il fatto che ogni quattro secoli non esiste un giorno bisestile.

Passaggio 4

Calcola il giorno della settimana in cui è iniziato l'anno: daySweden = weekDay + yearSiglover + base (yearSiglo / 4). Ad eccezione degli anni bisestili, ogni anno è necessario iniziare il giorno successivo della settimana iniziato l'anno precedente. Il calcolo, del modulo sette, indica il giorno della settimana del primo giorno dell'anno.

Passaggio 5

Trova il giorno della settimana in cui è iniziato il mese: weekDay = weekDay + base ((mese + 1) * 26) / 10). Questo è il cuore dell'algoritmo di Zeller che ha osservato che questo calcolo è in grado di determinare in quale giorno della settimana inizierà un mese. Con questa formula, viene eliminata la necessità di tabelle di ricerca per determinare la lunghezza di ogni mese.

Passaggio 6

Aggiungi il giorno del mese e calcola il giorno della settimana in cui cade la data: weekDay = weekDay + daySunday = weekDay mod 7.

Passaggio 7

Convertire la data secondo gli standard dell'Organizzazione internazionale per la standardizzazione: la data della settimana; il giorno della settimana inizia con lunedì = 1. Con l'algoritmo di Zeller, sabato viene utilizzato = 0. Per la conversione, viene utilizzata l'aritmetica modulare semplice: weekDay = ((weekDay + 5) mod 7) + 1.