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

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

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

目次

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

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

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

敬老の日とシルバーウィーク

敬老の日
AI生成コンテンツ / AI-generated content
先ほどの国民の祝日に関する法律は2001年(平成13年)6月22日に改正され(いわゆる「ハッピーマンデー法」)、2003年(平成15年)から敬老の日が9月15日から9月の第3月曜日に変更された。
これをプログラムで求めることは、さほど難しいことではない。なお、「国民の祝日」に挟まれる日を「国民の休日」とする規定(第三条三項)は、これより前の1985年(昭和60年)12月27日の改正で設けられたものである。
一方で、敬老の日が20日で秋分の日が22日、または敬老の日が21日で秋分の日が23日というケースが発生する可能性がある。この場合、敬老の日の前日の日曜日と合わせて4連休、土曜日が休みならば5連休となる。この大型連休は「第二のゴールデンウィーク」とも呼ばれるが、2009年(平成21年)ごろからは「シルバーウィーク」という呼び方が定着した。

このケースが最初に発生したのは2009年(平成21年)である。敬老の日が21日(月)、秋分の日が23日(水)で、間の22日(火)が「国民の休日」になり、19日(土)から23日(水)まで5連休となった。しかし、前述したように、この通りに秋分の日が設定されるかどうかは、その前年の2月になるまで分からない。
2020年(令和2年)は、敬老の日が21日(月)、秋分の日が22日(火)と隙間なく並んだため、19日(土)から22日(火)までの4連休にとどまった。

次に5連休が訪れたのは2015年(平成27年)で、2026年も敬老の日21日(月)・国民の休日22日(火)・秋分の日23日(水)の組み合わせとなり、19日(土)から23日(水)まで、2015年(平成27年)以来11年ぶりの5連休となった。

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

秋分の日ひとつをとっても、コンピュータで扱うのが難しいことが理解していただけたかと思う。
移動祝日としては、このほかに、成人の日、春分の日、海の日、スポーツの日(旧・体育の日)がある。なお、建国記念の日も祝日法には直接日付が書かれておらず「政令で定める日」とされているが、1966年(昭和41年)の政令で2月11日と定められて以来、この日付は変わっていない。

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

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

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

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

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

isholiday.php.txt

   8: //===============================================================================
   9: //Outlookの祝日テーブルを参照して、曜日と祝日を表示する
  10: //@param    $_POST["year"]  西暦年
  11: //@param    $_POST["month"] 月
  12: //@param    $_POST["day"]   日
  13: //@author   パパぱふぅ,2004/09/22,(c)studio pahoo
  14: //
  15: 
  16: //Outlookの祝日テーブル
  17: $FileHoliday = "C:/Program Files/Microsoft Office/OFFICE11/1041/OUTLOOK.HOL";
  18: 
  19: //日本の祝日テーブルを識別するための冒頭行文字列
  20: $Japan = mb_convert_encoding("日本", "UTF-8", "Shift_JIS");
  21: 

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

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

参考書籍

表紙 知れば知るほど面白い暦の謎
著者 片山 真人
出版社 三笠書房
サイズ 文庫
発売日 2022年02月17日頃
価格 858円(税込)
ISBN 9784837987635
1年、1カ月、1週間、1日…… 時の体系「暦」は、あまりに身近な存在で、私たちの生活に不可欠なもの。 でも、よくよく考えてみたら、素朴な疑問が湧いてきます。 1年は、なぜ「365日」なのか? 1週間は、なぜ「7日」なのか? 「曜日」は、どのように生まれたのか? 「季節」は、なぜ変化するのか? 1日は、なぜ「24時間」なのか?-- そこで本書では、国立天文台「暦の専門家」片山真人先生が、 「暦の謎」についてわかりやすく解き明かします。 1年、1カ月、1週間、1日、1時間、閏年、閏秒……といった暦の構成要素から、 潮の満ち干、日食・月食といった現象まで、暦の奥深い世界が楽しめる1冊です。
 
表紙 「国民の祝日」の由来がわかる小事典
著者 所功
出版社 PHP研究所
サイズ 新書
発売日 2003年08月
価格 858円(税込)
ISBN 9784569630861
「建国記念日の日」「こどもの日」「勤労感謝の日」…。今や年間十五日にのぼる「国民の祝日」はいつ頃、どのように成立したのか。古来の民俗的な年中行事や人生儀礼に伴なう祝祭日。明治以降の国家的な祝日。さらに平成に入ってから付け加えられた「みどりの日」や「海の日」など、「国民の祝日」は古さと新しさをあわせもつ。そこには、わが国で永年育まれてきた自然と、先祖に感謝する心、共同体の人間関係を尊ぶ豊かな精神が盛り込まれている。歴史学の観点から日本人の英知を解き明かす。
 

参考サイト

(この項おわり)
header