秋分の日と敬老の日の微妙な関係

計算で簡単に求められない

秋分の日

秋分の日
カレンダー機能が必要なアプリケーションを作ったことがあるだろうか。
最近のプログラミング言語は、年月日から曜日を取り出す手段が用意されているので、カレンダーを作るのも随分と楽になった。

だが、祝祭日を表示するとなると、話が途端にややこしくなる。
9 月は、秋分の日と敬老の日という 2 つの祝日がある。これらは移動祝日のため、計算で簡単に求められるものではないからだ。

秋分の日を計算するサンプル・プログラム

秋分の日の定義は「太陽が秋分点を通過する日」であるから、天文計算に少し詳しい方なら簡単に算出できる。
ここでは、「新こよみの便利帳」(恒星社厚生閣刊)の計算式を JavaScript で実装したプログラムを紹介する。1980 年(昭和 55 年)から 2099 年までの毎年の秋分の日を表示するプログラムである。

しかし、現実の秋分の日はこの計算通りには行かない。
国民の祝日に関する法律」第二条によると、秋分の日は「秋分日」に当たるとされる。では、「秋分日」とは何月何日なのか。
「秋分日」は、国立天文台が作成する「暦象年表」という小冊子に基いて閣議で決定され、これが官報によって周知される慣習になっている(法的に決まっているわけではない)。官報に載る時期は 2 月初頭で、ここに翌年の秋分の日が記載される慣習である(これも法律、政令等で決められているわけではない)。春分の日についても、同じ号の官報で公表される。
したがって、前年の 1 月以前に春分の日、秋分の日を特定することはできないのだ。前述のプログラムはあくまで目安であって、この通りに秋分の日が決まる保証はない。

敬老の日

敬老の日
先ほどの「国民の祝日に関する法律」は平成 13 年 6 月 22 日に改正され(いわゆる「ハッピーマンデー法」)、敬老の日が 9 月 15 日から 9 月の第3 月曜日に変更された。
これをプログラムで求めることは、さほど難しいことではない。「国民の祝日に関する法律」は、さらに平成 17 年 5 月 22 日に改正され、「国民の祝日」に挟まれる日は「国民の休日」となった(第三条三項)。
一方で、敬老の日が 20 日で秋分の日が 22 日、または敬老の日が 21 日で秋分の日が 23 日というケースが発生する可能性がある。この場合、敬老の日の前日の日曜日と合わせて 4連休、土曜日が休みならば 5連休となる。第二のゴールデンウィークが出現するのだ。
このケースが最初に発生するのは 2009 年(平成 21 年)である。敬老の日が 21 日で秋分の日が 23 日のケースで、22 日が「国民の休日」になる。しかし、前述したように、この通りに秋分の日が設定されるかどうかは、その前年の 2 月になるまで分からない。たとえば 2020 年(平成 32 年)には、敬老の日が 21 日で秋分の日が 22 日になるが、秋分の日を 23 日にずらして 4連休にすることもできる。

祝日をコンピュータで扱うにはどうしたらいいか

秋分の日 1 つをとっても、コンピュータで扱うのが難しいことが理解していただけたかと思う。
移動祝日としては、このほかに、成人の日、建国記念日、春分の日、海の日、体育の日がある。中でも一番厄介なのは建国記念日である。これは政令で定められることになっているので、今年(2004 年)は 2 月 11 日であったが、来年以降どう変わるか予測できない。

それでも祝日を表示させる必要に迫られることがあるだろう。
そうなったら、祝日はプログラムで算定できないものと割り切って、毎年の祝日テーブルを持たせるのが最善策である。

欧米は移動祝日が多いので、海外のカレンダープログラムは祝日テーブルを持っているものが多い。たとえば Microsoft Outlook のスケジュール帳がそうである。
日本ではハッピーマンデー法により祝日が移動したので、変更後のテーブルが Microsoft のサイトからダウンロードできるようになっている(OUTLOOK.HOL をダウンロードする)。
Web アプリであれば、サーバサイドに祝日テーブルを持たせればよいだろう。サーバのテーブルを変更するだけで移動祝日に対応できるからである。

Outlookの祝日テーブルから祝日を求めるプログラム

最後に、Microsoft Outlook の祝日テーブル "OUTLOOK.HOL" から祝日を抽出して表示する PHP プログラムを紹介する。

サンプル・プログラムの解説

0008: //===============================================================================
0009: //Outlookの祝日テーブルを参照して、曜日と祝日を表示する
0010: //@param  $_POST["year"]  西暦年
0011: //@param  $_POST["month"] 月
0012: //@param  $_POST["day"]   日
0013: //@author  パパぱふぅ,2004/09/22,(c)studio pahoo
0014: //
0015: 
0016: //Outlookの祝日テーブル
0017: $FileHoliday = "C:/Program Files/Microsoft Office/OFFICE11/1041/OUTLOOK.HOL";
0018: 
0019: //日本の祝日テーブルを識別するための冒頭行文字列
0020: $Japan = mb_convert_encoding("日本", "UTF-8", "Shift_JIS");
0021: 

まず、変数 $FileHoliday は、お手持ちの環境に変更すること。

"OUTLOOK.HOL" 自身は UNICODE で記述されており、Mac や Linux にコピーすればそのまま利用できる。プログラムではその辺も考慮してあるが、ソース自体は Shift_JIS なのでご注意を。
ただし、祝日テーブルを読む処理が重いので、プログラムが単純な割には時間がかかる。

参考書籍

表紙 新こよみ便利帳
著者 暦計算研究会
出版社 恒星社厚生閣
サイズ 単行本
発売日 1991年04月01日
価格 2,937円(税込)
rakuten
ISBN 9784769907008
暦は天文学の諸分野の中でも長い歴史をもち、人間の日常社会生活に深くかかわってきた。この本はその暦を含めて実地天文学で扱う広い範囲の情報・地識を、それぞれ使いやすい数表の形にした“永久保存版”基礎データ集成である。
 
表紙 暦を知る事典
著者 岡田芳朗
出版社 東京堂出版
サイズ 事・辞典
発売日 2006年05月
価格 2,700円(税込)
rakuten
ISBN 9784490106862
生活の節目を少なからず暦に依拠して生きる日本人。暦に凝縮されている過去の人々の膨大な知恵や経験とは?その起源から、暦のしくみと変遷、歴史、時刻制度さらには個別の暦など、万般にわたって分りやすく解説した全く新しい暦の小百科。
 

参考サイト

(この項おわり)
header