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

しかし、現実の秋分の日はこの計算通りには行かない。
「国民の祝日に関する法律」第二条によると、秋分の日は「秋分日」に当たるとされる。では、「秋分日」とは何月何日なのか。
「秋分日」は、国立天文台が作成する「暦象年表」という小冊子に基いて閣議で決定され、これが官報によって周知される慣習になっている(法的に決まっているわけではない)。官報に載る時期は2月初頭で、ここに翌年の秋分の日が記載される慣習である(これも法律、政令等で決められているわけではない)。春分の日についても、同じ号の官報で公表される。また、閣議決定された国民の祝日は、内閣府のページにCSVファイルとして公開されている。
したがって、前年の1月以前に春分の日、秋分の日を特定することはできないのだ。前述のプログラムはあくまで目安であって、この通りに秋分の日が決まる保証はない。
ここでは、「新こよみ便利帳」(恒星社厚生閣刊)の計算式を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日の改正で設けられたものである。
これをプログラムで求めることは、さほど難しいことではない。なお、「国民の祝日」に挟まれる日を「国民の休日」とする規定(第三条三項)は、これより前の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連休となった。
このケースが最初に発生したのは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アプリであれば、サーバサイドに祝日テーブルを持たせればよいだろう。サーバのテーブルを変更するだけで移動祝日に対応できるからである。
移動祝日としては、このほかに、成人の日、春分の日、海の日、スポーツの日(旧・体育の日)がある。なお、建国記念の日も祝日法には直接日付が書かれておらず「政令で定める日」とされているが、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なのでご注意を。
ただし、祝日テーブルを読む処理が重いので、プログラムが単純な割には時間がかかる。
"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 | ||
| 「建国記念日の日」「こどもの日」「勤労感謝の日」…。今や年間十五日にのぼる「国民の祝日」はいつ頃、どのように成立したのか。古来の民俗的な年中行事や人生儀礼に伴なう祝祭日。明治以降の国家的な祝日。さらに平成に入ってから付け加えられた「みどりの日」や「海の日」など、「国民の祝日」は古さと新しさをあわせもつ。そこには、わが国で永年育まれてきた自然と、先祖に感謝する心、共同体の人間関係を尊ぶ豊かな精神が盛り込まれている。歴史学の観点から日本人の英知を解き明かす。 | |||
参考サイト
- インターネット版官報
- PHPで祝日を求める:ぱふぅ家のホームページ
- PHPでGoogle Calendar APIを使って祝日を求める:ぱふぅ家のホームページ
(この項おわり)



最近のプログラミング言語は、年月日から曜日を取り出す手段が用意されているので、カレンダーを作るのも随分と楽になった。
だが、祝祭日を表示するとなると、話が途端にややこしくなる。
9月は、秋分の日と敬老の日という2つの祝日がある。これらは移動祝日のため、計算で簡単に求められるものではないからだ。