コンテンツにスキップ

ツェラーの公式

出典: フリー百科事典『ウィキペディア(Wikipedia)』
曜日計算から転送)

ツェラーの公式(ツェラーのこうしき、: Zeller's congruence)とは西暦グレゴリオ暦またはユリウス暦)のから、その日が何曜日であるかを算出する公式である。ドイツ数学者クリスティアン・ツェラー (Christian Zeller) が考案した [1] [2] [3] [4]

カタカナ表記は、ドイツ語読みで「ツェラーの公式」と記すのが一般的だが [5] 、英語読みで「ゼラーの公式」と表記されることもある [6] [7]

ユリウス通日(あるいは特定の日からの通算日数)を求め、そこから曜日を求める計算と本質は同じである。

公式

[編集]

ymd 日の曜日を求める。

ただし、1月2月は、前年のそれぞれ13月・14月として扱う。たとえば、2024年1月1日・2月1日は、2023年13月1日・14月1日とする。また、紀元前 年は西暦 年として扱う(天文学的紀年法)。たとえば、紀元前1年・前2年・前3年は、0年・-1年・-2年となる。

曜日 h は次の式で求められる( h は、0~6で土曜日~金曜日を表す):

グレゴリオ暦 (Gregorian) かユリウス暦 (Julian) かで変わる項で、

ただし

とする。

x を超えない(x以下)の最大の整数(床関数)であり、x mod nxn で割った剰余である。CY は、(西暦が4桁の場合)西暦の上2桁と下2桁を表す中間変数で、たとえば2024年なら、それぞれ20と24になる。

以上の2つの計算式は、それぞれの暦を過去または未来に単純に延長して使うのであれば、年数の有効範囲の限界はない。しかし歴史上の実際の年月日についての曜日を知るには、グレゴリオ暦に切り替わった日付に注意が必要である(グレゴリオ暦#各国・各地域における導入を参照)。さらに西暦4年3月1日以前の実際の年月日についての曜日を知るには、閏年の規則そのものが異なるので(ユリウス暦#運用を参照)、上記の計算式におけるユリウス暦の公式も適用できない。

ISO 8601 との関係

[編集]
曜日
h 1 2 3 4 5 6 0
D 7 1 2 3 4 5 6

日付の国際規格である ISO 8601が定める D(1~7で月曜日~日曜日)を求めるには、次の式

を使う。

コンピュータでの計算

[編集]

コンピュータの多くの環境では負数剰余を保証しないので(詳細は剰余演算を参照)、整数の合同関係を使って

と変形する。

西暦0年紀元前1年3月1日以前に対する場合、CY を求める式にも修正が必要である。適度に大きい100の倍数y に足して、負にならないようにする。

ツェラーの公式の導出

[編集]

ツェラーの公式はフェアフィールド (Fairfield) の公式を変形して導出することもできる。以下に、グレゴリオ暦を例に、その変形過程を記載する。

フェアフィールドの公式

[編集]

先発グレゴリオ暦の1年1月1日(0年13月1日) ~ ymd 日の日数 N を求める。ただし1月と2月は、前述のように前年の13月・14月として扱う。

1年1月1日(0年13月1日)を含めた、ymd 日迄の日数は以下の通り。

1年1月1日(0年13月1日) ~ 1年2月28日(0年14月28日)の日数:
1年3月1日 ~ ( y - 1 ) 年14月末日の閏日を除いた日数:
1年1月1日(0年13月1日) ~ ( y - 1 ) 年14月末日の閏年の回数(閏日の日数):
y 年3月1日 ~ y( m - 1 ) 月末日の日数(以下表を参照):
ym 月1日 ~ ymd 日の日数:
当月(m) 前月(m-1) 日数(Σ)
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 ) 月末日迄の日数と、 の値は完全に一致している。

従って、1年1月1日 ~ ymd 日の日数 N は、上記全てを合算した

となり、これを整理した

【※】

がフェアフィールドの公式である。

ツェラーの公式の導出

[編集]

曜日は7日間で循環しているので、上記【※】式の 7 の剰余を求めることで、曜日が判明する。即ち、

【I】

である。

このとき、h' のとり得る値は 0, 1, 2, 3, 4, 5, 6 で、順に日曜日、月曜日、火曜日、水曜日、木曜日、金曜日、土曜日を表す。

(現行のグレゴリオ暦は、1582年10月15日に、この日を金曜日であるとして施行されたがこの日を起点に、遡ってグレゴリオ暦を適用すると、1年1月1日は月曜日となるため h' の値が表す曜日がこのような並びになる)

【I】式が 7 の剰余である事を利用すると、以下の通り変形できる。

ここで、床関数の性質( , ただし b は整数)を利用すると、

さらに、h' が 7 の剰余であることを利用して、

と変形できる。

y = 100C + Y ( 0 ≦ Y ≦ 99, C, Y は整数)と置くと、以下の通り変形される。

h' が 7 の剰余であることを利用して、

ここで、0 ≦ Y ≦ 99より、0 ≦ Y/100 ≦ 0.99, 0 ≦ Y/400 ≦ 0.2475 であり、

また、C/4 の小数部分は、0, 0.25, 0.5, 0.75 の何れかの値を取る為、C/4 + Y/400 の小数部分は、高々 0.75 + 0.2475 = 0.9975 であり、

としてよい。よって、

このとき、h' のとり得る値は 0, 1, 2, 3, 4, 5, 6 で、順に日曜日、月曜日、火曜日、水曜日、木曜日、金曜日、土曜日を表す(【I】式の場合と同様)。

演算(項)数を減らすためこの式の被除数に 1 加算すると

となり、ツェラーの公式が導出できる。

このとき、h のとり得る値は 0, 1, 2, 3, 4, 5, 6 で、順に土曜日、日曜日、月曜日、火曜日、水曜日、木曜日、金曜日を表す(被除数に 1 加算しているため【I】式の場合と比べ、1日分のずれが生じた)。

脚注

[編集]
  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 
  2. ^ Zeller, Christian (1883) (ラテン語), Problema duplex Calendarii fundamentale, 11, Bulletin de la Société Mathématique de France, pp. 59-61 
  3. ^ Zeller, Christian (1885) (ドイツ語), Kalender-Formeln, 1, Mathematisch-naturwissenschaftliche Mitteilungen des mathematisch-naturwissenschaftlichen Vereins in Württemberg, pp. 54-58 
  4. ^ Zeller, Christian (1887) (ドイツ語), Kalender-Formeln, 9, Acta Mathematica, pp. 131-136, doi:10.1007/BF02406733 
  5. ^ 細井勉; 嶋田君枝『PASCALによるプログラミング入門』産業図書、1981年、175頁。doi:10.11501/12631695 
  6. ^ 小林光夫; 荒井嘉夫『Pascal ABC : マイコンとの対話』広済堂出版、1980年5月、117頁。doi:10.11501/12631596 
  7. ^ 藤村幸三郎; 田村三郎『数学歴史パズル : 数学者も頭をひねった75問 (ブルーバックス)』講談社、1985年1月、211頁。doi:10.11501/12608305ISBN 4-06-118192-0