nmtysh.log

Tech系のネタや日々の独り言などを書いています。

ツェラーの公式で曜日を求める(備忘録)

与えられた日付から曜日を計算する方法を考えていて、"ある日付を基点としてその日付から曜日を求めたい日付までの日数を計算して、基点の日付の曜日(0~6)を足して全体を7で割ったあまりを出す。"という方法を考えました。 ただ、この方法だとこの基点とした日付よりも前の日付の曜日は調べられません。(試していませんが、)そして、この基点の日付をより前の日付に設定する場合、その曜日を調べるのが大変です。 そこでインターネットで調べるとツェラーの公式というものが出てきたので、このツェラーの公式について調べてみました。

ツェラーの公式(Zeller's congruence)は、西暦の年、月、日からその日が何曜日であるかを算出する公式である。 via ツェラーの公式 - wikipedia

Wikipediaにある説明を読んでもどうしてこの式で求まるのかさっぱり分かりません。 他のサイトを見てみると、mixi's Diaryというサイトに"ツェラーの公式の証明"のページがあり参考になったので(記憶力が悪いので)忘れたときのために、書いておきます。

Fairfieldの公式
「y年 m月 d日 までの日数」(3<=m<=14) = 365*y + [y/4] - [y/100] + [y/400] + [306*(m+1)/10] + d - 428 [x]はxを超えない最大の整数
※計算の都合上、1,2月は前年の13,14月として計算する。
このFairfieldの公式を使ってツェラーの公式を作る。

ツェラーの公式
「y年 m月 d日の曜日 (0:日曜 ~ 6:土曜)」(3<=m<=14) =(365*y + [y/4] - [y/100] + [y/400] + [306*(m+1)/10] + d - 428) %7 =(y + [y/4] - [y/100] + [y/400] + [(13m + 8)/5] + d) %7

参考にしたページ
mixi's Diary ツェラーの公式の証明 - はじめに
ツェラーの公式の証明 - その1
ツェラーの公式の証明 - その2
ツェラーの公式の証明 - その3