En vanlig algoritm för beräkning av veckodag för ett visst datum är Zeller algoritm . Algoritmen publicerades 1882 och syftar till att bearbetas för hand , men kan lätt implementeras i mjukvara . Zeller algoritm fungerar genom att finna den veckodag århundradet började , sedan bygga därifrån genom att lägga år, månader och dagar . En god förståelse för modulo aritmetik är nödvändigt för att förstå hur algoritmen fungerar , men vem som helst kan genomföra det genom att följa instruktionerna . Instruktioner
1
Förbered ingångarna . Algoritmen väntar en dag , månad och år .
Zeller algoritm numrerar månader från tre till 14 , med början mars och slutar med februari. Detta garanterar att hoppa dagar alltid faller i slutet av året , förenkla beräkningar.
P Om månad < 3 då , month = månad + 12
2
Beräkna talet och år av århundradet . Det århundrade för 1950 bör vara 19 , även om det faller under det tjugonde århundradet .
Talet = floor ( år /100 ) yearOfCentury = år mod 100
3
Hitta den dag i veckan då seklet började .
dayOfWeek = floor ( talet /4 ) + 5 * talet
Zeller fastställt att denna beräkning modulo sju , kommer att ge dagen för vecka som en given talet började . Golvet Beräkningen hanterar det faktum att var fjärde århundradet är kort en skottdag .
4
Beräkna veckodag att året började på .
DayOfWeek = dayOfWeek + yearOfCentury + golv ( yearOfCentury /4 ) katalog
Varje år börjar på nästa veckodag än föregående år , med undantag för skottår . Denna beräkning , modulo sju , ger veckodagen för den första dagen på året .
5
Hitta veckodag att månaden började på .
DayOfWeek = dayOfWeek + floor ( (månad + 1 ) * 26 ) /10 ) katalog
Detta är hjärtat i Zeller algoritm . Zeller konstaterade att denna beräkning kan bestämma på vilken dag i veckan i månaden börjar . Det eliminerar behovet av uppslagstabeller att bestämma längden på varje månad .
6
Lägg dagen i månaden och beräkna veckodag då datumet infaller .
DayOfWeek = dayOfWeek + daydayOfWeek = dayOfWeek mod 7
7
Konvertera datum till ISO-standarder vecka Datum .
ISO vecka datum dag- för - veckors börjar med måndag = 1 . Zeller algoritm använder Lördag = 0 . Omvandlingen använder enkla modulo aritmetik .
DayOfWeek = ( ( dayOfWeek + 5 ) mod 7 ) + 1