ツェラーの公式 (ツェラーのこうしき、英 : Zeller's congruence )とは西暦 (グレゴリオ暦 またはユリウス暦 )の年 ・月 ・日 から、その日が何曜日 であるかを算出する公式である。ドイツ の数学者 クリスティアン・ツェラー (Christian Zeller ) が考案した
[ 1]
[ 2]
[ 3]
[ 4]
。
カタカナ表記は、ドイツ語読みで「ツェラーの公式」と記すのが一般的だが
[ 5]
、英語読みで「ゼラーの公式」と表記されることもある
[ 6]
[ 7]
。
ユリウス通日 (あるいは特定の日からの通算日数)を求め、そこから曜日を求める計算と本質は同じである。
y 年 m 月 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 は次の式で求められる( 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){\bmod {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
1
00
{\displaystyle Y=y{\bmod {1}}00}
とする。
⌊
x
⌋
{\displaystyle \lfloor x\rfloor }
は x を超えない(x 以下)の最大の整数(床関数 )であり、x mod n は x を n で割った剰余 である。C と Y は、(西暦が4桁の場合)西暦の上2桁と下2桁を表す中間変数で、たとえば2024年なら、それぞれ20と24になる。
以上の2つの計算式は、それぞれの暦を過去または未来に単純に延長して使うのであれば、年数の有効範囲の限界はない。しかし歴史上の実際の年月日についての曜日を知るには、グレゴリオ暦 に切り替わった日付に注意が必要である(グレゴリオ暦#各国・各地域における導入 を参照)。さらに西暦4年 3月1日 以前の実際の年月日についての曜日を知るには、閏年 の規則そのものが異なるので(ユリウス暦#運用 を参照)、上記の計算式におけるユリウス暦の公式も適用できない。
曜日
日
月
火
水
木
金
土
h
1
2
3
4
5
6
0
D
7
1
2
3
4
5
6
日付 の国際規格である ISO 8601 が定める 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){\bmod {7}}\right)+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 と Y を求める式にも修正が必要である。適度に大きい100の倍数 を y に足して、負にならないようにする。
ツェラーの公式はフェアフィールド (Fairfield ) の公式を変形して導出することもできる。以下に、グレゴリオ暦を例に、その変形過程を記載する。
先発グレゴリオ暦 の1年1月1日(0年13月1日) ~ y 年 m 月 d 日の日数 N を求める。ただし1月と2月は、前述のように前年の13月・14月として扱う。
1年1月1日(0年13月1日)を含めた、y 年 m 月 d 日迄の日数は以下の通り。
1年1月1日(0年13月1日) ~ 1年2月28日(0年14月28日)の日数:
31
+
28
{\displaystyle 31+28}
1年3月1日 ~ ( y - 1 ) 年14月末日の閏日を除いた日数:
365
(
y
−
1
)
{\displaystyle 365(y-1)}
1年1月1日(0年13月1日) ~ ( y - 1 ) 年14月末日の閏年の回数(閏日の日数):
⌊
1
+
(
y
−
1
)
4
⌋
−
⌊
1
+
(
y
−
1
)
100
⌋
+
⌊
1
+
(
y
−
1
)
400
⌋
{\displaystyle \left\lfloor {\frac {1+(y-1)}{4}}\right\rfloor -\left\lfloor {\frac {1+(y-1)}{100}}\right\rfloor +\left\lfloor {\frac {1+(y-1)}{400}}\right\rfloor }
=
⌊
y
4
⌋
−
⌊
y
100
⌋
+
⌊
y
400
⌋
{\displaystyle =\left\lfloor {\frac {y}{4}}\right\rfloor -\left\lfloor {\frac {y}{100}}\right\rfloor +\left\lfloor {\frac {y}{400}}\right\rfloor }
y 年3月1日 ~ y 年 ( m - 1 ) 月末日の日数(以下表を参照):
⌊
306
(
m
+
1
)
10
⌋
−
122
{\displaystyle \left\lfloor {\frac {306(m+1)}{10}}\right\rfloor -122}
y 年 m 月1日 ~ y 年 m 月 d 日の日数:
d
{\displaystyle d}
当月(m)
前月(m-1)
日数(Σ)
⌊
306
(
m
+
1
)
10
⌋
−
122
{\displaystyle \left\lfloor {\frac {306(m+1)}{10}}\right\rfloor -122}
3
0
0
4
3
31
31
5
4
61
61
6
5
92
92
7
6
122
122
8
7
153
153
9
8
184
184
10
9
214
214
11
10
245
245
12
11
275
275
13
12
306
306
14
13
337
337
※3月1日 ~ ( m - 1 ) 月末日迄の日数と、
⌊
306
(
m
+
1
)
10
⌋
−
122
{\displaystyle \left\lfloor {\frac {306(m+1)}{10}}\right\rfloor -122}
の値は完全に一致している。
従って、1年1月1日 ~ y 年 m 月 d 日の日数 N は、上記全てを合算した
N
=
31
+
28
+
365
(
y
−
1
)
+
⌊
y
4
⌋
−
⌊
y
100
⌋
+
⌊
y
400
⌋
+
⌊
306
(
m
+
1
)
10
⌋
−
122
+
d
{\displaystyle N=31+28+365(y-1)+\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 -122+d}
となり、これを整理した
N
=
365
y
+
⌊
y
4
⌋
−
⌊
y
100
⌋
+
⌊
y
400
⌋
+
⌊
306
(
m
+
1
)
10
⌋
+
d
−
428
{\displaystyle N=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}
【※】
がフェアフィールドの公式である。
曜日は7日間で循環しているので、上記【※】 式の 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){\bmod {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
{\displaystyle {\begin{array}{lcl}h'&=&\left(7(52y-62)+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 {153(m+1)}{5}}\right\rfloor +6+d\right){\bmod {7}}\\&=&\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 {153(m+1)}{5}}\right\rfloor +6+d\right){\bmod {7}}\end{array}}}
ここで、床関数の性質(
⌊
a
⌋
+
b
=
⌊
a
+
b
⌋
{\displaystyle \lfloor a\rfloor +b=\lfloor a+b\rfloor }
, ただし 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
{\displaystyle {\begin{array}{lcl}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 {153(m+1)}{5}}+6\right\rfloor +d\right){\bmod {7}}\\&=&\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 {153m+153+30}{5}}\right\rfloor +d\right){\bmod {7}}\\&=&\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 {153m+183}{5}}\right\rfloor +d\right){\bmod {7}}\\&=&\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 {35(4m+5)+13m+8}{5}}\right\rfloor +d\right){\bmod {7}}\\&=&\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 7(4m+5)+{\frac {13m+8}{5}}\right\rfloor +d\right){\bmod {7}}\end{array}}}
さらに、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){\bmod {7}}}
と変形できる。
y = 100C + Y ( 0 ≦ Y ≦ 99 , C , Y は整数)と置くと、以下の通り変形される。
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
×
18
)
C
−
2
C
+
Y
+
⌊
Y
4
⌋
−
⌊
Y
100
⌋
+
⌊
C
4
+
Y
400
⌋
+
⌊
26
m
+
26
10
⌋
+
d
−
1
)
mod
7
{\displaystyle {\begin{array}{lcl}h'&=&\left(100C+Y+\left\lfloor {\frac {100C+Y}{4}}\right\rfloor -\left\lfloor {\frac {100C+Y}{100}}\right\rfloor +\left\lfloor {\frac {100C+Y}{400}}\right\rfloor +\left\lfloor {\frac {13m+8}{5}}\right\rfloor +d\right){\bmod {7}}\\&=&\left(100C+Y+\left\lfloor 25C+{\frac {Y}{4}}\right\rfloor -\left\lfloor C+{\frac {Y}{100}}\right\rfloor +\left\lfloor {\frac {C}{4}}+{\frac {Y}{400}}\right\rfloor +\left\lfloor {\frac {26m+26}{10}}-1\right\rfloor +d\right){\bmod {7}}\\&=&\left(100C+Y+\left\lfloor 25C+{\frac {Y}{4}}\right\rfloor -\left\lfloor C+{\frac {Y}{100}}\right\rfloor +\left\lfloor {\frac {C}{4}}+{\frac {Y}{400}}\right\rfloor +\left\lfloor {\frac {26m+26}{10}}\right\rfloor -1+d\right){\bmod {7}}\\&=&\left(100C+Y+25C+\left\lfloor {\frac {Y}{4}}\right\rfloor -C-\left\lfloor {\frac {Y}{100}}\right\rfloor +\left\lfloor {\frac {C}{4}}+{\frac {Y}{400}}\right\rfloor +\left\lfloor {\frac {26m+26}{10}}\right\rfloor +d-1\right){\bmod {7}}\\&=&\left(124C+Y+\left\lfloor {\frac {Y}{4}}\right\rfloor -\left\lfloor {\frac {Y}{100}}\right\rfloor +\left\lfloor {\frac {C}{4}}+{\frac {Y}{400}}\right\rfloor +\left\lfloor {\frac {26m+26}{10}}\right\rfloor +d-1\right){\bmod {7}}\\&=&\left(\left(7\times 18\right)C-2C+Y+\left\lfloor {\frac {Y}{4}}\right\rfloor -\left\lfloor {\frac {Y}{100}}\right\rfloor +\left\lfloor {\frac {C}{4}}+{\frac {Y}{400}}\right\rfloor +\left\lfloor {\frac {26m+26}{10}}\right\rfloor +d-1\right){\bmod {7}}\end{array}}}
h' が 7 の剰余であることを利用して、
h
′
=
(
−
2
C
+
Y
+
⌊
Y
4
⌋
−
⌊
Y
100
⌋
+
⌊
C
4
+
Y
400
⌋
+
⌊
26
m
+
26
10
⌋
+
d
−
1
)
mod
7
{\displaystyle h'=\left(-2C+Y+\left\lfloor {\frac {Y}{4}}\right\rfloor -\left\lfloor {\frac {Y}{100}}\right\rfloor +\left\lfloor {\frac {C}{4}}+{\frac {Y}{400}}\right\rfloor +\left\lfloor {\frac {26m+26}{10}}\right\rfloor +d-1\right){\bmod {7}}}
ここで、0 ≦ Y ≦ 99 より、0 ≦ Y / 100 ≦ 0.99 , 0 ≦ Y / 400 ≦ 0.2475 であり、
⌊
Y
100
⌋
=
0
{\displaystyle \left\lfloor {\frac {Y}{100}}\right\rfloor =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
⌋
{\displaystyle \left\lfloor {\frac {C}{4}}+{\frac {Y}{400}}\right\rfloor =\left\lfloor {\frac {C}{4}}\right\rfloor }
としてよい。よって、
h
′
=
(
−
2
C
+
Y
+
⌊
Y
4
⌋
+
⌊
C
4
⌋
+
⌊
26
m
+
26
10
⌋
+
d
−
1
)
mod
7
{\displaystyle h'=\left(-2C+Y+\left\lfloor {\frac {Y}{4}}\right\rfloor +\left\lfloor {\frac {C}{4}}\right\rfloor +\left\lfloor {\frac {26m+26}{10}}\right\rfloor +d-1\right){\bmod {7}}}
このとき、h' のとり得る値は 0, 1, 2, 3, 4, 5, 6 で、順に日曜日、月曜日、火曜日、水曜日、木曜日、金曜日、土曜日を表す(【I】 式の場合と同様)。
演算(項)数を減らすためこの式の被除数に 1 加算すると
h
=
(
−
2
C
+
Y
+
⌊
Y
4
⌋
+
⌊
C
4
⌋
+
⌊
26
(
m
+
1
)
10
⌋
+
d
)
mod
7
{\displaystyle h=\left(-2C+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){\bmod {7}}}
となり、ツェラーの公式が導出できる。
このとき、h のとり得る値は 0, 1, 2, 3, 4, 5, 6 で、順に土曜日、日曜日、月曜日、火曜日、水曜日、木曜日、金曜日を表す(被除数に 1 加算しているため【I】 式の場合と比べ、1日分のずれが生じた)。
^
Zeller, Christian (1882) (ドイツ語), Die Grundaufgaben der Kalenderrechnung auf neue und vereinfachte Weise gelöst , V , Württembergische Vierteljahrshefte für Landesgeschichte, pp. 313-314, doi :10.53458/wvjh.v5i.14389
^
Zeller, Christian (1883) (ラテン語), Problema duplex Calendarii fundamentale , 11 , Bulletin de la Société Mathématique de France, pp. 59-61
^
Zeller, Christian (1885) (ドイツ語), Kalender-Formeln , 1 , Mathematisch-naturwissenschaftliche Mitteilungen des mathematisch-naturwissenschaftlichen Vereins in Württemberg, pp. 54-58
^
Zeller, Christian (1887) (ドイツ語), Kalender-Formeln , 9 , Acta Mathematica, pp. 131-136, doi :10.1007/BF02406733
^
細井勉; 嶋田君枝『PASCALによるプログラミング入門』産業図書、1981年、175頁。doi :10.11501/12631695 。
^
小林光夫; 荒井嘉夫『Pascal ABC : マイコンとの対話』広済堂出版、1980年5月、117頁。doi :10.11501/12631596 。
^
藤村幸三郎; 田村三郎『数学歴史パズル : 数学者も頭をひねった75問 (ブルーバックス)』講談社、1985年1月、211頁。doi :10.11501/12608305 。ISBN 4-06-118192-0 。