Zeller-képlet kalkulátor

Christian Zeller 1882-es kongruencia-képlete — a hét napja bármely dátumhoz

Mi a Zeller-kongruencia?

1882-ben Christian Zeller német matematikus publikálta híres kongruencia-képletét, amellyel bármely dátumra egyetlen sor számolással meghatározható a hét napja. A képlet a moduláris aritmetikára épül és minden modern naptár-algoritmus alapját képezi.

A Gergely-naptári képlet

Adott egy dátum: y év, m hónap (3–14), q nap. (Január és február a megelőző év 13. és 14. hónapjaként számít.)

h = (q + ⌊13(m+1)/5⌋ + K + ⌊K/4⌋ + ⌊J/4⌋ − 2J) mod 7

ahol:

  • K = y mod 100 (évszázadon belüli év: pl. 2025 → K=25)
  • J = ⌊y / 100⌋ (évszázad: pl. 2025 → J=20)
  • ⌊x⌋ = a x egészrésze (floor)

A kapott h a hét napját jelenti, az alábbi módon:

  • h = 0 → szombat
  • h = 1 → vasárnap
  • h = 2 → hétfő
  • h = 3 → kedd
  • h = 4 → szerda
  • h = 5 → csütörtök
  • h = 6 → péntek

A Julián-naptári változat

A Julián-naptárhoz csak egy tagot változtatunk: a −2J helyett +5−J szerepel. Pontosabban:

h = (q + ⌊13(m+1)/5⌋ + K + ⌊K/4⌋ + 5 − J) mod 7

Miért működik?

A képlet 4 fő részből áll:

  • q — a hónapon belüli nap egyszerű hozzáadása
  • ⌊13(m+1)/5⌋ — a hónap pozícióját kódolja egy ügyes lépcsős-függvénnyel (mert a hónapok különböző hosszúak)
  • K + ⌊K/4⌋ — az adott évszázadon belüli "év-eltolódás" + szökőév-korrekció
  • ⌊J/4⌋ − 2J (Gergely) vagy 5 − J (Julián) — az évszázad-eltolódás + a 400 éves Gergely-szabály korrekciója

A január és február "13. és 14. hónapként" kezelése azért szükséges, mert így a február 29 (szökőnap) "egy hónap végén" van, nem a hónap közepén — ami egyszerűbbé teszi a képletet.

Példa: 2025. november 4. (kedd)

  • q = 4, m = 11 (november), y = 2025
  • K = 2025 mod 100 = 25
  • J = ⌊2025 / 100⌋ = 20
  • ⌊13 × 12 / 5⌋ = ⌊31.2⌋ = 31
  • ⌊25 / 4⌋ = 6
  • ⌊20 / 4⌋ = 5
  • h = (4 + 31 + 25 + 6 + 5 − 2×20) mod 7 = (4 + 31 + 25 + 6 + 5 − 40) mod 7 = 31 mod 7 = 3 → kedd

Egyéb módszerek

A Doomsday-szabály egy mentálisan könnyebb módszer; a flexibilis öröknaptár pedig a teljes éves naptárt mutatja vizuálisan. 14 öröknaptár-típus →

Gyakran ismételt kérdések

Ki volt Christian Zeller?

Christian Julius Johannes Zeller (1822–1899) német matematikus és evangélikus lelkész, aki egész életét a Württembergi Királyság-ban élte. 1882-ben publikálta híres kongruencia-képletét a francia Bulletin de la Société Mathématique de France-ban "Problema duplex Calendarii fundamentale" címmel. A képlet a moduláris aritmetika eleganciájának egyik klasszikus példája lett.

Miért kezeli január és február "13. és 14. hónapként"?

A szökőnap (február 29.) a február végén van. Ha a januárt és februárt az előző év 13-14. hónapjaként kezeljük, akkor a szökőnap "egy év vége felé" kerül, és az utána következő márciustól-decemberig terjedő rész "új évként" indul. Így a képlet hónap-tagja (`⌊13(m+1)/5⌋`) egyetlen lineáris formulával lefedi a hónapok eltolódásait, anélkül, hogy külön esetet kelljen kezelni a szökőévre.

Mi a különbség a Julián és a Gergely változat között?

A két változat csak az évszázad-tagban tér el. A Julián-naptárban minden 4. év szökőév volt, a Gergely-naptárban kihagyjuk a 100-zal osztható, de 400-zal nem osztható éveket. Zeller képlete ezt egy egyszerű szám-eltolással kezeli: Gergely-nél ⌊J/4⌋ − 2J, Julián-nál 5 − J. Az 1582 előtti dátumokhoz mindig Julián változatot kell használni.

Mire jó a Zeller-képlet a modern szoftverekben?

Az operációs rendszerek és programozási nyelvek naptár-függvényei (pl. JavaScript Date.getDay(), Python datetime.weekday()) gyakorlatilag Zeller-rokon algoritmusokat használnak optimalizált formában. A képlet egyszerűsége miatt beágyazott rendszerekben is fut (mikrokontrollerek, óra-chipek), ahol nincs hely teljes naptár-könyvtárra.

Hibázik-e a Zeller-képlet az 1582 előtti éveknél?

Csak a Gergely változat hibázik 1582 előtt, mert akkor még a Julián-naptár volt érvényben. Az ilyen történelmi dátumokhoz mindig a Julián opciót válaszd a kalkulátorban — például "1492. október 12." (Kolumbusz Amerika-felfedezése) Julián szerint péntek volt, Gergely szerint pedig akkor még nem létezett naptári napként.

Link vágólapra másolva!