プログラミング 自由研究

暦の面倒臭さと和暦の元号カレンダーを作った話

投稿日:

前書き

japanese-era-calendarというのを作った。

これは和暦の元号カレンダーで、過去すべての元号と西暦の対応表として使える。連続した値としてUNIX timeや修正ユリウス日も表記しているので、プログラムからでも利用しやすい。
なぜこういう物が必要なのか、説明したい。

そもそも暦とは

この記事を書いている今日は西暦2024年6月22日で、和暦だと令和6年6月22日だ。
西暦と和暦は年の数え方が違うだけ、少なくとも今はそうだ。
しかしこれは過去の日本で暦を国際化したからで、それまでは違う暦が使われていた。

そもそも暦というのは時代によって変化するものだ。現代日本でも”旧暦”という形で話に上がることあがる。
まず西洋にも旧暦が存在する。現行の国際的な暦はグレゴリオ暦といい、その前に西洋ではユリウス暦が使われていた。今の暦との違いは閏年(うるうどし)の数え方だ。
また日本における旧暦というのは、太陰暦つまり月の満ち欠けに合わせた暦だ。新月が1日で、満月が15日。「三日月」や「十五夜」という言葉にこの名残がある。この数え方だと12ヶ月では足らなくなってしまうので、ひと月余計に増やす閏月(うるうづき)というものがある。

このように、暦というのは世界の地域において様々な数え方で運用されており、昔は「ある地域の1月1日は他の地域でも1月1日」というわけではなかった。

暦をどう捉えるのか

1000年前の今日はいつ?

たとえば今から1000年前の今日を考える。1000年前の今日、とはいつだろう。

西暦でいえば1014年6月22日のこと、ととらえるのが自然だろうか。
しかし待ってほしい。西暦にも旧暦であるユリウス暦があった。1014年当時使われていた暦はユリウス暦だ。
そして「グレゴリオ暦で換算した1014年6月22日」と「ユリウス暦1014年6月22日」は別なのだ。

和暦でいえばどうなるだろう。西暦1014年は和暦だと長和3年に相当する。
では長和3年6月22日のことだろうか。
旧暦は日付がずれているので、ユリウス暦1014年6月22日に相当するのは長和3年5月22日だという考え方もある。

また、暦がどうとか言うのではなく、この際うるう年も無視して(1000 × 365)日前のことだ、としてもいい。
その場合該当するのはユリウス暦1025年2月14日、和暦だと万寿2年1月14日だ。

さて、「2024年6月22日の1000年前」にいくつか候補が出てきた。
「グレゴリオ暦で換算した1014年6月22日」、「ユリウス暦1014年6月22日 = 長和3年5月22日」、「長和3年6月22日」、「ユリウス暦1025年2月14日 = 万寿2年1月14日」。
これらのどれが正しいとかの話ではない。どれを採用してもいいだろう。

とにかく、暦とは複雑なものなのだ。

対応カレンダーの必要性

聖徳太子が生まれたのは何日前?

聖徳太子の誕生日は和暦でいうと敏達天皇3年1月1日、西暦だとユリウス暦574年2月7日である。
これは今日から何日前だろうか。答えは529,735日前だ。
この日数を何らかの計算式で弾き出せるだろうか。
西暦で換算しようにも、この間に何日のうるう年が挟まったのかをグレゴリオ暦とユリウス暦で分けて計算する必要があるというだけで吐き気がする。

こういった複雑さから、過去の日付を正しく得るには、何らかの計算式でパッと表せるわけではなく、カレンダーを知っておく必要がある。
計算すれば年月日を求められるのはグレゴリオ暦が通用する1582年10月15日以降に限られるのだ。

対応カレンダーの作り方

では対応カレンダーはどう作れば良いのか。

簡単だ、専門機関を信じるのだ。
古来より日本では暦は天文学の管轄だった。現代でも春分の日と秋分の日の2つの祝日は国立天文台が発表しているのだ。
というわけで国立天文台が暦計算室というWebサイトを公開していて、過去のすべての年号のカレンダーを取得できるようになっている。
国立天文台がどのように暦を管理しているか、というと、それはもう歴史の積み重ねだろう。ありがたく利用させていただこう。

この国立天文台のデータを整形し、プログラムから使いやすくしたのが冒頭のjapanese-era-calendarである。
国立天文台のデータには既に修正ユリウス日や皇紀は付与されていたが、一般的なプログラマーにはUNIX timeの方が馴染みがあるだろうと自前でUNIX timeも付与した。
1日毎のデータだと行が溢れかえってしまうので、要点だけを絞った簡略版も提供しているので、プログラミング能力に応じて使い分けてほしい。

おわりに

というわけで、暦の複雑さは理解頂けたと思う。
なるべく暦とかかわらない人生を送って頂けると幸いである。

-プログラミング, 自由研究

執筆者:

関連記事

no image

「遠赤外線で温かい」とは何か調べてみた

皆さん、遠赤外線好きですか? コタツとか、サウナとか、電気ヒーターとかから出てるらしいです。 焼き芋とか焼き鳥とか、土鍋とかも、遠赤外線で美味しくなるらしいです。 どういうことなんでしょう。私はよくわ …

no image

M5StickC Plusの明るさ(M5.Axp.ScreenBreath)、0~100かもしれない

M5StickC Plusで画面の明るさを調整するM5.Axp.ScreenBreath()という関数があります。 日本語リファレンスでは指定値7~12ということになっています。 また、公式ドキュメン …

GeoJSONで市町村境界をマージして都道府県境界にしたい(その2)

GeoJSONのPolygonをマージしたい第2回です。 前回、純粋な多角形の統合ではなくて、領域が被らない多角形の統合になるのでグラフ問題として解くことができるという説明をしました。 今回はどうやっ …

no image

Google Apps Script(GAS)で自宅サーバーの死活監視をする

もくじ1 前置き2 概要3 できあがり3.1 GAS側3.2 自宅サーバー側4 解説5 蛇足1 ログを取る6 蛇足2 サーバーをタイマ起動させて監視 前置き 自宅サーバー使ってますか? 最近もう流行ら …

メカニカルキーボードを水洗いしてメーカーに捕捉されるまでの顛末

こんにちはぎんしゃりです。 最近キーボードを水洗いしてバズりました。 丸半日かけて俺を爆笑させてくれるフォロワーが居るTLに心を救われてる pic.twitter.com/K0I3DPPfE5 &md …