プログラミング 自由研究

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

投稿日:

前書き

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

次世代のライティング手法、AAW―対話型AIによる文章生成でより高品質なコンテンツを

AAWとは何か? 私が提案するAAWは、AI Assisted Writingの略であり、人工知能を活用することで文章を効率的に生成する新しい技法です。 AAWは、ChatGPTのような対話型AIを用 …

中華製のCO2モニターを買ったらCO2センサーが入ってなかった話

CO2モニターを買ったんですよCO2モニターを。 在宅勤務で締め切った部屋で働いているので、ちょっと気になったんで。 ↓これ。 で、数日使ってみたんですけどどうも怪しい。怪しすぎる。 換気の悪い部屋に …

no image

謎のアパレルブランド「電子女子」について

電子女子 ここに謎の新アパレルブランド「電子女子」がある。 今わかっているのはtwitterアカウントのみ。 2019/11/1現在、ツイート数は3つ。全部引用する。 Coming soon #電子女 …

no image

NHKを従量課金にすると1時間いくらになるの?

もくじ はじめに ワンセグチューナー付きのケータイもNHK受信料の支払い義務があるとかなんとかニュースになってます。 そもそもNHK受信料って月額制の契約をやめて、従量課金にできないもんなんでしょうか …

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

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