万年カレンダーを作るために必要なZeller(ツェラー)の公式
サヴァン症候群の人がカレンダー計算で驚異的な能力を示すという話を聞いたことがあるんですが、
たとえば「何十万年後の何月何日は何曜日?」って聞かれるとすぐに答えられるらしい。
常人にはそんなこと出来ないですが、Zeller(ツェラー)の公式を使うと出来ます。
しかしながらZeller(ツェラー)の公式を暗算で解けれるほど簡単ではないので、コンピュータのお力を借りて解いてみます。
http://easycgi.xrea.jp/perltips/zeller.htm
'指定した年月日から曜日を返す(曜日 〜Zeller(ツェラー)の公式〜) '引数 ' y・・・(年4桁), ' m・・・(月) ' d・・・(日) '戻り値 ' 0=日, 1=月, 2=火, 3=水, 4=木, 5=金, 6=土 ' Public Function zeller(y, m, d) If (m < 3) Then y = y - 1 m = m + 12 End If zeller = (y + Int(y/4) - Int(y/100) + Int(y/400) + Int((13*m+8)/5) + d) Mod 7 End Function
意外と簡単
といってもVBやVBAにはWEEKDAY関数なるものがあるので、こんな公式使わなくてもいいんですが、、、
WEEKDAY 関数では 1900 年 1 月 1 日より前、9999 年 12 月 31 日より後の正しい曜日が返らないらしいです。
万年カレンダーを作りたい人は覚えてて損はないかも。