En vanlig algoritme for beregning av ukedagen til en bestemt dato er Zeller algoritme . Algoritmen ble publisert i 1882 og designet for å bli jobbet for hånd , men kan lett bli implementert i programvare. Zeller algoritme fungerer ved å finne den dagen i uken århundret startet , for så å bygge derfra ved å legge til år, måneder og dager . En god forståelse av modulo aritmetikk er nødvendig for å forstå hvordan algoritmen virker, men alle kan gjennomføre det ved å følge instruksjonene . Instruksjoner
en
Forbered inngangene . Algoritmen forventer en dag, måned og år .
Zeller algoritme tall månedene fra tre til 14 , og starter med mars og slutter med februar. Dette garanterer at spranget dager alltid faller på slutten av året , noe som forenkler beregninger .
P Hvis måned < 3 da , måned = måned + 12
2
Beregn århundre og år av århundret. Det tallet for 1950 skal være 19 , selv om det faller i det tjuende århundre .
Århundre = floor ( år /100 ) yearOfCentury = år mod 100
3
Finn den dagen i uken der tallet startet .
dayOfWeek = floor ( århundre /4 ) + 5 * århundre
Zeller fastslått at denne beregningen , syv modulo , vil gi den dagen den uke at enhver tallet startet . Gulvet beregningen håndterer det faktum at hver fjerde århundre er kort en skuddårsdag .
4
Beregn dag i uken at året startet på .
DayOfWeek = dayOfWeek + yearOfCentury + etasje ( yearOfCentury /4 )
Hvert år begynner på neste dag i uken enn i året før, med unntak av skuddår . Denne beregningen , syv modulo , gir dagen i uken av den første dagen i året .
5
Finn den dagen i uken som måneden startet på .
DayOfWeek = dayOfWeek + etasje ( (måned + 1 ) * 26 ) /10 )
p Dette er hjertet av Zeller algoritme . Zeller observert at denne beregningen er i stand til å avgjøre på hvilken ukedag en måned vil starte. Det eliminerer behovet for søketabeller å bestemme lengden av hver måned .
6
Legg den dagen i måneden og beregne dagen i uken der datoen faller .
DayOfWeek = dayOfWeek + daydayOfWeek = dayOfWeek mod 7
7
konvertere datoen til ISO uken dato standarder .
ISO uke dag -of- uker starter med mandag = 1 . Zeller algoritme bruker Lørdag = 0 . Konverteringen bruker enkle modulo aritmetikk.
DayOfWeek = ( ( dayOfWeek + 5 ) mod 7 ) + 1