En fælles algoritme til at beregne ugedag en bestemt dato er Zeller algoritme . Algoritmen blev offentliggjort i 1882 og designet til at blive bearbejdet i hånden, men kan let implementeres i software . Zeller algoritme fungerer ved at finde den dag i ugen århundredet begyndte , og derefter bygge derfra ved at tilføje år, måneder og dage . En god forståelse af modulo aritmetik er nødvendig for at forstå, hvordan algoritmen virker, men alle kan implementere den ved at følge anvisningerne . Instruktioner
1
Forbered indgangene. Algoritmen forventer en dag , måned og år .
Zeller algoritme nummererer måneder fra tre til 14 , begyndende med marts og slutter med februar . Dette garanterer, at spring dage altid falder i slutningen af året , hvilket forenkler beregninger.
P Hvis måned <3 derefter , måned = måned + 12
2
Beregn århundrede og den år af århundredet. Den århundrede for 1950 skulle være 19 , selv om det falder i det tyvende århundrede.
Århundrede = gulv (år /100) yearOfCentury = år mod 100
3
Find den dag i ugen, hvor århundredet begyndte .
dayOfWeek = floor ( tallet /4) + 5 * århundrede
Zeller fastslået, at denne beregning modulo syv, vil give den dag uge , at enhver given århundrede begyndte . Gulvet Beregningen håndterer det faktum, at hver fjerde århundrede er kort en skuddag .
4
Beregn dag i ugen , at året begyndte den .
DayOfWeek = dayOfWeek + yearOfCentury + floor ( yearOfCentury /4)
Hvert år begynder på den næste dag i ugen end i det foregående år, bortset fra skudår . Denne beregning , modulo syv, giver ugedagen for den første dag i året .
5.
Find ugedag at måneden startede den .
DayOfWeek = dayOfWeek + floor ( (måned + 1) * 26) /10)
p Dette er hjertet af Zeller algoritme . Zeller observeret, at denne beregning er i stand til at afgøre, på hvilken dag i ugen for en måned vil starte. Det eliminerer behovet for opslagstabeller at bestemme længden af hver måned .
6
Tilsæt dag i måneden og beregne ugedag , hvor dato falder .
DayOfWeek = dayOfWeek + daydayOfWeek = dayOfWeek mod 7
7
Konverter datoen ISO uge opdaterede normer .
ISO uge dag -of- ugers starter med mandag = 1 . Zeller algoritme anvender lørdag = 0 . Konverteringen bruger simple modulo aritmetik.
DayOfWeek = (( dayOfWeek + 5) mod 7) + 1