ツェラーの公式(ツェラーのこうしき、英: Zeller's congruence)とは西暦(グレゴリオ暦またはユリウス暦)の年・月・日から、その日が何曜日であるかを算出する公式である。クリスティアン・ツェラー (Christian Zeller) が考案した[1]。ユリウス通日を求め、そこから曜日を求める計算と本質は同じである。
公式
年 月 日の曜日を求める。
ただし、1月と2月は、前年のそれぞれ13月・14月として扱う。たとえば、2024年1月1日・2月1日は、2023年13月1日・14月1日とする。また、紀元前 年は西暦 年として扱う。たとえば、紀元前1年・前2年・前3年は、0年・-1年・-2年となる(天文学的紀年法)。
曜日 (は、0~6で土曜日~金曜日を表す。) は次の式で求められる:
はグレゴリオ暦 (Gregorian) かユリウス暦 (Julian) かで変わる項で、
ただし
- 。
はxを超えない(x以下)の最大の整数(床関数)であり、 は を で割った剰余である。 と は、(西暦が4桁の場合)西暦の上2桁と下2桁を表す中間変数で、たとえば2024年なら、それぞれ20と24になる。
曜日 | 日 | 月 | 火 | 水 | 木 | 金 | 土 |
---|---|---|---|---|---|---|---|
h | 1 | 2 | 3 | 4 | 5 | 6 | 0 |
D | 7 | 1 | 2 | 3 | 4 | 5 | 6 |
日付の国際規格である ISO 8601が定める (1~7で月曜日~日曜日)を求めるには、次の式
を使う。
以上の2つの計算式は、それぞれの暦を過去または未来に単純に延長して使うのであれば、年数の有効範囲の限界はない。しかし歴史上の実際の年月日についての曜日を知るには、グレゴリオ暦に切り替わった日付に注意が必要である(グレゴリオ暦#各国・各地域における導入を参照)。さらに西暦4年3月1日以前の実際の年月日についての曜日を知るには、閏年の規則そのものが異なるので、上記の計算式におけるユリウス暦の公式も適用できない。
コンピュータでの計算
コンピュータの多くの環境では負数の剰余を保証しないので、整数の合同関係を使って
と変形する。
西暦0年(紀元前1年)3月1日以前に対する場合、 と を求める式にも修正が必要である。適度に大きい100の倍数を に足して、負にならないようにする。
ツェラーの公式の導出
ツェラーの公式はフェアフィールド (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 の公式
となる。
曜日は7日間で循環しているので、上記【※】式の 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 の剰余であることを利用して、
・・・ 【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 加算すると
・・・ 【III】
となる。
このとき、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" Württembergische Vierteljahrshefte für Landesgeschichte (in German). V: 313-314.