ツェラーの公式
ツェラーの公式(Zeller's congruence)とは西暦の年、月、日からその日が何曜日であるかを算出する公式である。
まず求めたい日の年の千の位と百の位の連続の数字(例えば2310年ならば23)をJ、年の下2桁(例えば2310年ならば10)をK、月をm、日をq、曜日をhとする。ただし求めたい日の月が1月、2月の場合はそれぞれ前年の13月、14月とする(例えば、2007年1月1日なら2006年13月1日とする)。
次にユリウス暦の場合は

の計算をし、またグレゴリオ暦の場合は

の計算をする。hが0なら土曜日、1なら日曜日、2なら月曜日、3なら火曜日、4なら水曜日、5なら木曜日、6なら金曜日である。
なお
はxを超えない(x以下)の最大の整数(床関数)、x mod 7はxを7で割った余り(剰余演算)である。
目次 |
[編集] プログラミング言語での使用
プログラミング言語においては負の値に対する剰余演算の都合上、整数の合同関係を用いて変形した式が用いられる。
ユリウス暦の場合は

となり、グレゴリオ暦の場合は

となる。
[編集] ツェラーの公式の証明
ツェラーの公式はフェアフィールド(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 (日)
| 当月(m) | 前月(m-1) | 日数(Σ) | [306(m+1)/10]-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 の値は完全に一致している。
従って、1年1月1日 ~ y 年 m 月 d 日の日数は、上記全てを合算した、
31 + 28 + 365 ( y - 1 ) + [ y / 4 ] - [ y / 100 ] + [ y / 400 ] + [ 306 ( m + 1 ) / 10 ] - 122 + d

・・・ 【※】/ Fairfield の公式
となる。一方、現行のグレゴリオ暦は、1582年10月15日を金曜日として施行されているが、仮に1年1月1日に施行されていたとすると、1年1月1日は月曜日であり、上記【※】式の 7 の剰余を求めることで、曜日が判明する。即ち、

・・・ 【Ⅰ】
但し、h が 0, 1, 2, 3, 4, 5, 6 の場合、それぞれ 日曜日、月曜日、火曜日、水曜日、木曜日、金曜日、土曜日
[編集] ツェラーの公式への変形
【Ⅰ】式が 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 ] + [ 28 m + ( 13 / 5 ) m + 35 + 8 / 5 ] + d ) mod 7
= ( y + [ y / 4 ] - [ y / 100 ] + [ y / 400 ] + [ ( 13 m + 8 ) / 5 + 7 ( 4 m + 5 ) ] + d ) mod 7
= ( y + [ y / 4 ] - [ y / 100 ] + [ y / 400 ] + [ ( 13 m + 8 ) / 5 ] + 7 ( 4 m + 5 ) + d ) mod 7
さらに、h が 7 の剰余であることを利用して、

・・・ 【Ⅱ】
が導き出される。因みに【Ⅱ】式は、ツェラーの公式として広く一般的に知られているものである。
[編集] ツェラーの公式の変形
y = 100 J + K ( 0 ≦ K ≦ 99, J, K は整数)と置くと、(Ⅱ)式は以下の通り変形される。
h = ( 100 J + K + [ ( 100 J + K ) / 4 ] - [ ( 100 J + K ) / 100 ] + [ ( 100 J + K ) / 400 ] + [ ( 13 m + 8 ) / 5 ] + d ) mod 7
= ( 100 J + K + [ 25 J + K / 4 ] - [ J + K / 100 ] + [ J / 4 + K / 400 ] + [ ( 26 m + 26 ) / 10 - 1 ] + d ) mod 7
= ( 100 J + K + [ 25 J + K / 4 ] - [ J + K / 100 ] + [ J / 4 + K / 400 ] + [ ( 26 m + 26 ) / 10 ] - 1 + d ) mod 7
= ( 100 J + K + 25 J + [ K / 4 ] - J - [ K / 100 ] + [ J / 4 + K / 400 ] + [ ( 26 m + 26 ) / 10 ] + d - 1 ) mod 7
= ( 124 J + K + [ K / 4 ] - [ K / 100 ] + [ J / 4 + K / 400 ] + [ ( 26 m + 26 ) / 10 ] + d - 1 ) mod 7
= ( ( 7 * 17 ) J + 5 J + K + [ K / 4 ] - [ K / 100 ] + [ J / 4 + K / 400 ] + [ ( 26 m + 26 ) / 10 ] + d - 1 ) mod 7
h が 7 の剰余であることを利用して、
h = ( 5 J + K + [ K / 4 ] - [ K / 100 ] + [ J / 4 + K / 400 ] + [ ( 26 m + 26 ) / 10 ] + d - 1 ) mod 7
ここで、0 ≦ K ≦ 99より、0 ≦ K / 100 ≦ 0.99, 0 ≦ K / 400 ≦ 0.2475 であり、
[ K / 100 ] = 0
また、J / 4 の少数部分は、0, 0.25, 0.5, 0.75 の何れかの値を取る為、J / 4 + K / 400 の少数部分は、高々 0.75 + 0.2475 = 0.9975 であり、
[ J / 4 + K / 100 ] = [ J / 4 ]
としてよい。よって、
h = ( 5 J + K + [ K / 4 ] + [ J / 4 ] + [ ( 26 m + 26 ) / 10 ] + d - 1 ) mod 7
但し、h が 0, 1, 2, 3, 4, 5, 6 の場合、それぞれ 日曜日、月曜日、火曜日、水曜日、木曜日、金曜日、土曜日
が導き出され、被除数に 1 加算することで、

・・・ 【Ⅲ】
但し、h が 0, 1, 2, 3, 4, 5, 6 の場合、それぞれ 土曜日、日曜日、月曜日、火曜日、水曜日、木曜日、金曜日
が導き出される。
【証明終】