ツェラーの公式

ツェラーの公式（ツェラーのこうしき、英: Zeller's congruence）とは西暦（グレゴリオ暦またはユリウス暦）の年・月・日から、その日が何曜日であるかを算出する公式である。クリスティアン・ツェラー (Christian Zeller) が考案した。ユリウス通日を求め、そこから曜日を求める計算と本質は同じである。 y {\displaystyle y} 年 m {\displaystyle m} 月 d {\displaystyle d} 日の曜日を求める。 ただし、1月と2月は、前年のそれぞれ13月・14月として扱う。たとえば、2024年1月1日・2月1日は、2023年13月1日・14月1日とする。また、紀元前 y ^ {\displaystyle {\hat {y}}} 年は西暦 1 − y ^ {\displaystyle 1-{\hat {y}}} 年として扱う。たとえば、紀元前1年・前2年・前3年は、0年・－1年・－2年となる（天文学的紀年法）。 曜日 h {\displaystyle h} （ h {\displaystyle h} は、0～6で土曜日～金曜日を表す。） は次の式で求められる： h = { d + ⌊ 26 ( m + 1 ) 10 ⌋ + Y + ⌊ Y 4 ⌋ + Γ } mod 7 {\displaystyle h=\left\{d+\left\lfloor {\frac {26(m+1)}{10}}\right\rfloor +Y+\left\lfloor {\frac {Y}{4}}\right\rfloor +{\mathit {\Gamma }}\right\}\mod 7} Γ {\displaystyle {\mathit {\Gamma }}} はグレゴリオ暦 (Gregorian) かユリウス暦 (Julian) かで変わる項で、 Γ = { − 2 C + ⌊ C 4 ⌋ : Gregorian  ( 1582 ⪅ y ) − C + 5 : Julian  ( 4 ⪅ y ⪅ 1582 ) {\displaystyle {\mathit {\Gamma }}={\begin{cases}-2C+\left\lfloor {\frac {C}{4}}\right\rfloor &{\mbox{: Gregorian }}(1582\lessapprox y)\\-C+5&{\mbox{: Julian }}(4\lessapprox y\lessapprox 1582)\end{cases}}} ただし C = ⌊ y 100 ⌋ {\displaystyle C=\left\lfloor {\frac {y}{100}}\right\rfloor } Y = y mod 100 {\displaystyle Y=y\mod 100} 。 ⌊ x ⌋ {\displaystyle \lfloor x\rfloor } はxを超えない（x以下）の最大の整数（床関数）であり、 x mod n {\displaystyle x\mod n} は x {\displaystyle x} を n {\displaystyle n} で割った剰余である。 C {\displaystyle C} と Y {\displaystyle Y} は、（西暦が4桁の場合）西暦の上2桁と下2桁を表す中間変数で、たとえば2024年なら、それぞれ20と24になる。 日付の国際規格である ISO 8601が定める D {\displaystyle D} （1～7で月曜日～日曜日）を求めるには、次の式 D = [ { d + ⌊ 26 ( m + 1 ) 10 ⌋ + Y + ⌊ Y 4 ⌋ + Γ + 5 } mod 7 ] + 1 {\displaystyle D=\left[\left\{d+\left\lfloor {\frac {26(m+1)}{10}}\right\rfloor +Y+\left\lfloor {\frac {Y}{4}}\right\rfloor +{\mathit {\Gamma }}+5\right\}\mod 7\right]+1} を使う。 以上の2つの計算式は、それぞれの暦を過去または未来に単純に延長して使うのであれば、年数の有効範囲の限界はない。しかし歴史上の実際の年月日についての曜日を知るには、グレゴリオ暦に切り替わった日付に注意が必要である（グレゴリオ暦#各国・各地域における導入を参照）。さらに西暦4年3月1日以前の実際の年月日についての曜日を知るには、閏年の規則そのものが異なるので、上記の計算式におけるユリウス暦の公式も適用できない。 コンピュータの多くの環境では負数の剰余を保証しないので、整数の合同関係を使って Γ = { 5 C + ⌊ C 4 ⌋ : Gregorian  ( 1582 ⪅ y ) 6 C + 5 : Julian  ( 4 ⪅ y ⪅ 1582 ) {\displaystyle {\mathit {\Gamma }}={\begin{cases}5C+\left\lfloor {\frac {C}{4}}\right\rfloor &{\mbox{: Gregorian }}(1582\lessapprox y)\\6C+5&{\mbox{: Julian }}(4\lessapprox y\lessapprox 1582)\end{cases}}} と変形する。 西暦0年（紀元前1年）3月1日以前に対する場合、 C {\displaystyle C} と Y {\displaystyle Y} を求める式にも修正が必要である。適度に大きい100の倍数を y {\displaystyle y} に足して、負にならないようにする。 ツェラーの公式はフェアフィールド (Fairfield) の公式の変形である。以下に、グレゴリオ暦を例に、その変形過程を記載する。 1年1月1日（0年13月1日） ～ y 年 m 月 d 日の日数を求める。ただし、m = 1, 2 の場合は、y = y － 1, m = m + 12とし、1年を、3月1日 ～ 14月28日（閏年は29日）と再定義する。 1年1月1日（0年13月1日）を含めた、y 年 m 月 d 日迄の日数は以下の通り。 　1年1月1日（0年13月1日） ～ 1年2月28日（0年14月28日） 　　・・・　　31 + 28 （日） 　1年3月1日 ～ ( y － 1 ) 年14月末日（この時点では閏年は考慮しない） 　　・・・　　365 ( y － 1 ) （日） 　1年1月1日（0年13月1日） ～ ( y － 1 ) 年14月末日の閏年の回数 　　・・・　　[ ( 1 + ( y － 1 ) ) / 4 ) ] - [ ( 1 + ( y － 1 ) ) / 100 ) ] + [ ( 1 + ( y － 1 ) ) / 400 ) ] 　　　　　　= [ y / 4 ] - [ y / 100 ] + [ y / 400 ] （日） 　y 年3月1日 ～ y 年 ( m － 1 ) 月末日 　　・・・　　[ 306 ( m + 1 ) / 10 ] － 122 （日）　（以下表を参照） 　y 年 m 月1日 ～ y 年 m 月 d 日 　　・・・　　d （日） 　　※3月1日 ～ ( m － 1 )月末日迄の日数と、[ 306 ( m + 1 ) / 10 ] － 122 の値は完全に一致している。 従って、1年1月1日 ～ y 年 m 月 d 日の日数は、上記全てを合算した、 　　31 + 28 + 365 ( y － 1 ) + [ y / 4 ] - [ y / 100 ] + [ y / 400 ] + [ 306 ( m + 1 ) / 10 ] － 122 + d = 365 y + ⌊ y 4 ⌋ − ⌊ y 100 ⌋ + ⌊ y 400 ⌋ + ⌊ 306 ( m + 1 ) 10 ⌋ + d − 428 {\displaystyle =365y+\left\lfloor {\frac {y}{4}}\right\rfloor -\left\lfloor {\frac {y}{100}}\right\rfloor +\left\lfloor {\frac {y}{400}}\right\rfloor +\left\lfloor {\frac {306(m+1)}{10}}\right\rfloor +d-428} 　　・・・　　【※】／ Fairfield の公式 となる。 曜日は７日間で循環しているので、上記【※】式の 7 の剰余を求めることで、曜日が判明する。即ち、 h = ( 365 y + ⌊ y 4 ⌋ − ⌊ y 100 ⌋ + ⌊ y 400 ⌋ + ⌊ 306 ( m + 1 ) 10 ⌋ + d − 428 ) mod 7 {\displaystyle h=\left(365y+\left\lfloor {\frac {y}{4}}\right\rfloor -\left\lfloor {\frac {y}{100}}\right\rfloor +\left\lfloor {\frac {y}{400}}\right\rfloor +\left\lfloor {\frac {306(m+1)}{10}}\right\rfloor +d-428\right)\mod 7} 　　・・・　　【I】 である。 このとき、h のとり得る値は 0, 1, 2, 3, 4, 5, 6 で、順に日曜日、月曜日、火曜日、水曜日、木曜日、金曜日、土曜日を表す （現行のグレゴリオ暦は、1582年10月15日に、この日を金曜日であるとして施行されたがこの日を起点に、遡ってグレゴリオ暦を適用すると、1年1月1日は月曜日となるため h の値が表す曜日がこのような並びになる） 【I】式が 7 の剰余である事を利用すると、以下の通り変形できる。 　　h = ( 7 ( 52 y - 62) + y + [ y / 4 ] - [ y / 100 ] + [ y / 400 ] + [ 153 ( m + 1 ) / 5 ] + 6 + d )　mod　7 　　　= (　　　　　　　　　　y + [ y / 4 ] - [ y / 100 ] + [ y / 400 ] + [ 153 ( m + 1 ) / 5 ] + 6 + d )　mod　7 ここで、[ ] （ガウス記号）の性質（ [ a ] + b = [ a + b ] , ただし b は整数）を利用すると、 　　h = ( y + [ y / 4 ] - [ y / 100 ] + [ y / 400 ] + [ 153 ( m + 1 ) / 5 + 6 ] + d )　mod　7 　　　= ( y + [ y / 4 ] - [ y / 100 ] + [ y / 400 ] + [ ( 153 m + 153 + 30 ) / 5 ] + d )　mod　7 　　　= ( y + [ y / 4 ] - [ y / 100 ] + [ y / 400 ] + [ ( 153 m + 183 ) / 5 ] + d )　mod　7 　　　= ( y + [ y / 4 ] - [ y / 100 ] + [ y / 400 ] + [ ( 35 ( 4 m + 5 ) + 13 m + 8 ) / 5 ] + d )　mod　7 　　　= ( y + [ y / 4 ] - [ y / 100 ] + [ y / 400 ] + [ 7 ( 4 m + 5 ) + ( 13 m + 8 ) / 5 ] + d )　mod　7 さらに、h が 7 の剰余であることを利用して、 h = ( y + ⌊ y 4 ⌋ − ⌊ y 100 ⌋ + ⌊ y 400 ⌋ + ⌊ 13 m + 8 5 ⌋ + d ) mod 7 {\displaystyle h=\left(y+\left\lfloor {\frac {y}{4}}\right\rfloor -\left\lfloor {\frac {y}{100}}\right\rfloor +\left\lfloor {\frac {y}{400}}\right\rfloor +\left\lfloor {\frac {13m+8}{5}}\right\rfloor +d\right)\mod 7} 　　・・・　　【II】 が導き出される。 y = 100 C + Y ( 0 ≦ Y ≦ 99, C, Y は整数)と置くと、（II）式は以下の通り変形される。 　　h = ( 100 C + Y + [ ( 100 C + Y ) / 4 ] - [ ( 100 C + Y ) / 100 ] + [ ( 100 C + Y ) / 400 ] + [ ( 13 m + 8 ) / 5 ] + d )　mod　7 　　　= ( 100 C + Y + [ 25 C + Y / 4 ] - [ C + Y / 100 ] + [ C / 4 + Y / 400 ] + [ ( 26 m + 26 ) / 10 － 1 ] + d )　mod　7 　　　= ( 100 C + Y + [ 25 C + Y / 4 ] - [ C + Y / 100 ] + [ C / 4 + Y / 400 ] + [ ( 26 m + 26 ) / 10 ] － 1 + d )　mod　7 　　　= ( 100 C + Y + 25 C + [ Y / 4 ] - C - [ Y / 100 ] + [ C / 4 + Y / 400 ] + [ ( 26 m + 26 ) / 10 ] + d － 1 )　mod　7 　　　= ( 124 C + Y 　　　　 + [ Y / 4 ] 　 　 - [ Y / 100 ] + [ C / 4 + Y / 400 ] + [ ( 26 m + 26 ) / 10 ] + d － 1 )　mod　7 　　　= ( ( 7 * 17 ) C + 5 C + Y + [ Y / 4 ] - [ Y / 100 ] + [ C / 4 + Y / 400 ] + [ ( 26 m + 26 ) / 10 ] + d － 1 )　mod　7 h が 7 の剰余であることを利用して、 　　h = ( 5 C + Y + [ Y / 4 ] - [ Y / 100 ] + [ C / 4 + Y / 400 ] + [ ( 26 m + 26 ) / 10 ] + d － 1 )　mod　7 ここで、0 ≦ Y ≦ 99より、0 ≦ Y / 100 ≦ 0.99, 0 ≦ Y / 400 ≦ 0.2475 であり、 　　[ Y / 100 ] = 0 また、C / 4 の小数部分は、0, 0.25, 0.5, 0.75 の何れかの値を取る為、C / 4 + Y / 400 の小数部分は、高々 0.75 + 0.2475 = 0.9975 であり、 　　[ C / 4 + Y / 400 ] = [ C / 4 ] としてよい。よって、 　　h = ( 5 C + Y + [ Y / 4 ] + [ C / 4 ] + [ ( 26 m + 26 ) / 10 ] + d － 1 )　mod　7 このとき、h のとり得る値は 0, 1, 2, 3, 4, 5, 6 で、順に日曜日、月曜日、火曜日、水曜日、木曜日、金曜日、土曜日を表す（【I】式の場合と同様）。 演算（項）数を減らすためこの式の被除数に 1 加算すると h = ( 5 C + Y + ⌊ Y 4 ⌋ + ⌊ C 4 ⌋ + ⌊ 26 ( m + 1 ) 10 ⌋ + d ) mod 7 {\displaystyle h=\left(5C+Y+\left\lfloor {\frac {Y}{4}}\right\rfloor +\left\lfloor {\frac {C}{4}}\right\rfloor +\left\lfloor {\frac {26(m+1)}{10}}\right\rfloor +d\right)\mod 7} 　　・・・　　【III】 となる。 このとき、h のとり得る値は 0, 1, 2, 3, 4, 5, 6 で、順に土曜日、日曜日、月曜日、火曜日、水曜日、木曜日、金曜日を表す（被除数に 1 加算しているため【I】式の場合と比べ、１日分のずれが生じた）。 　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　【証明終】 [脚注の使い方] ^ Zeller, Christian (1882). 「Die Grundaufgaben der Kalenderrechnung auf neue und vereinfachte Weise gelöst" Württembergische Vierteljahrshefte für Landesgeschichte (in German). V: 313-314.