カレンダーのプログラムを作っている T です。こんばんは。
単純なカレンダーなら容易に作ることができる。というか、もうできている。カレンダーを作る上で最初の障壁は閏月であるが、簡単な公式から、X年の 2月が閏月であるかどうかがわかる。
次に問題となるのが、 X年 Y月 Z日の曜日である。これには、特定の日の曜日がわかるツェラー の公式 (Zeller's fomula) というものがある。
ちなみに、ツェラーの公式の有効範囲は 1583年から 3999年まで。歴史か、よほど未来の SF でも書かない限り、不自由はしない。
さて、ここまでは簡単にできた。しかしそれだけでは芸がないので、やはり祝祭日も特定したい。ここで頭を悩ますのがハッピー・マンデーである。ハッピー・マンデー以前なら、祝祭日は固定だったので難しくはない。祝祭日のリストと対応させれば事は済む。
祝祭日を直近の月曜日に移動させること自体は、それほど難儀ではない。が、祝祭日ごとに、ハッピー・マンデーが適用される年が違ったりするのでややこしい。例えば、成人の日は 2000年から、海の日は 2003年からである。そもそも、海の日が実施されたのは 1996年からであって、全てを計算だけで済ませるのはおよそ不可能である。
全てが自動的に行われなければ、もはやプログラムの意味がない。祝祭日の表示は諦めようかという気分になりつつある。