Upgrade to Pro — share decks privately, control downloads, hide ads and more …

和暦を正しく扱うための暦の話

nagise
January 21, 2023

 和暦を正しく扱うための暦の話

burikaigi 2023 の懇親会で発表したセッションの資料です。
日本では明治6年(1873)よりグレゴリオ暦が採用されましたが、それ以前の年代での和暦の扱いについて注意点をまとめたものです。

nagise

January 21, 2023
Tweet

Other Decks in Programming

Transcript

  1. 和暦を正しく扱うための
    暦の話
    Burikaigi 2023
    @nagise なぎせゆうき

    View Slide

  2. 和暦クイズ
    日本の暦における1年の日数は? ※692年~2023年

    View Slide

  3. 和暦クイズの答え
    1年の日数もいろいろあります!
    日本暦日原典の記述を基にnagiseが編集した

    View Slide

  4. 日本で用いられた暦法
    国立天文台 暦Wiki より
    https://eco.mtk.nao.ac.jp/koyomi/wiki/CEF2BBCB2FC6FCCBDCA4CECEF1.html

    View Slide

  5. 年の区切り問題
    《赤穂浪士の討ち入りの日を「元禄15年(1702年)12月14日」
    とするのを見ることがあるが、元禄15年12月はグレゴリオ暦で
    は1703年の1月~2月に当たるので、1702年とするのは不適切で
    ある。またグレゴリオ暦の日付では元禄15年の12月14日は1月30
    日にあたるが、討ち入りしたとき既に深夜0時を過ぎていたので、
    討ち入りは「1月31日」の出来事になる[8]。よって赤穂浪士の討
    入りの日付を文献史料などに記載する場合には、「元禄15年12
    月14日(1703年1月31日未明)」とするのが最も適切である》
    https://ja.wikipedia.org/wiki/%E5%A4%AA%E9%99%B0%E5%
    A4%AA%E9%99%BD%E6%9A%A6

    View Slide

  6. ISO 8601
    • 日付と時刻の表記に関するISOの国際規格
    • グレゴリオ暦で過去に遡って適用(先発グレゴリオ暦)
    • コンピュータ上での扱いはISO準拠が無難
    • しかし表示上は利用者の文化にあわせて表示する必要がある
    • ISOでは紀元0年が存在するので史実のユリウス暦などとすり合
    わせる際には気を付ける

    View Slide

  7. 太陽暦
    • 地球が太陽のまわりを回る周期(太陽年)を基にしている
    • 太陽年は約365.2422日であるため、1年をおよそ365日とし、閏
    年を設け端数を処理する方法が取られる
    • 月の満ち欠け → ガン無視
    暦法 閏年 1年の長さ(平均)
    ユリウス暦 4年に1回 365.25日
    グレゴリオ暦 400年に97回 365.2425日

    View Slide

  8. ユリウス暦
    • 日本では正式な暦として用いられたことはない
    • 古い時代の暦日の基準として用いられることがある
    • ガイウス・ユリウス・カエサルにより紀元前45年1月1日より
    ローマにて行用
    • 初期に閏年が誤って3年に1回で運用されたりと混乱がみられる
    • java.util.GregorianCalendar は1582年10月15日より前はユリウ
    ス暦として動く

    View Slide

  9. グレゴリオ暦
    • ローマ教皇グレゴリウス13世がユリウス暦の改良を命じ、1582
    年10月15日金曜日から行用
    • 年が4で割り切れる年が閏年
    • ただし、年が100で割り切れる場合は平年
    • ただし、年が400で割り切れる場合は閏年
    • 400年に97回の閏年
    • 閏日2月29日はコンピュータシステム上、バグが生じやすい日
    • 1582年以前に対して遡って適用するものを先発グレゴリオ暦と
    いう。ISO 8601も先発グレゴリオ暦

    View Slide

  10. ユリウス暦とグレゴリオ暦の切り替わり
    • ユリウス暦1582年10月4日(木)の翌日がグレゴリオ暦1582年10
    月15日(金)
    • また、史実として欧州全体で一斉に切り替わったわけではない
    点に注意
    • 現在でもユリウス暦を使い続けている教会などもある
    • コンピュータ上では1582年10月4日の翌日が1582年10月15日と
    なる実装がしばしば見られる

    View Slide

  11. java.util.GregorianCalendar
    https://docs.oracle.com/javase/jp/17/docs/api/java.base/java/util/GregorianCalendar.html
    • グレゴリオ暦の実装だが、 1582年10月15日より前はユリウス
    暦となる
    • setGregorianChangeでユリウス暦ないし先発グレゴリオ暦と
    して動かすこともできる

    View Slide

  12. 太陽太陰暦
    • 地球が太陽の周りを回る周期と、月が地球の周りを回る周期の
    両方を基にする
    • つまり、複雑
    • 日本の古代の暦は中国の暦法の輸入
    • 月の満ち欠けの周期は平均して約29.53日
    • 1か月を30日の大の月と、29日の小の月をおいて調整する
    • 1日は新月の日で朔(さく)とも呼ばれる
    • 15日あたりが満月になるが、実際にはもっと複雑

    View Slide

  13. 閏月
    • 1年を24等分したものが二十四節気
    • うち、半分が節気、半分が中気と呼ばれる
    • 中気の「雨水」を含む月を一月といった風に月を定める
    • 基本的には中気を含まない月を閏月とする

    View Slide

  14. UNDECIMBER
    • java.util.Calendar には 13番目の月をあらわすUNDECIMBER
    フィールドが宣言されている
    • 和暦の太陽太陰暦での閏月をあらわすには機能的に不足
    • ユダヤ暦の閏月(アダル月)を念頭においたものか?
    • ユダヤ暦では12月アダル月を2回繰り返す形で閏月を挿入

    View Slide

  15. 和暦クイズ
    • 日本で最初に用いられた元号は

    View Slide

  16. 和暦クイズ
    • 日本で最初に用いられた元号は大化ですが、二番目に用いられ
    た元号は

    View Slide

  17. 和暦クイズ
    • 日本で最初に用いられた元号は大化ですが、二番目に用いられ
    た元号は白雉( はくち、びゃくち、しらきぎす )です。
    • いずれの元号も孝徳天皇によるものですが、白雉5年に孝徳天
    皇が崩御すると姉の斉明天皇(さいめいてんのう)が次代の天
    皇となります。
    • 白雉5年の翌年は何元年と呼ばれたでしょうか?

    View Slide

  18. 和暦クイズの正解
    斉明天皇元年

    View Slide

  19. 紀年法
    • 年の表し方のこと
    • 日本では元号の利用以前は即位紀元が用いら
    れていた
    • 《改天豊財重日足姫天皇四年、為大化元年》
    • 天豊財重日足姫天皇(あめとよたからいかし
    ひたらしひめのすめらみこと)とは皇極(こ
    うぎょく)天皇の和風諡号(しごう) 日本書紀 巻第二十五

    View Slide

  20. 元号の停止と再開
    • 大化(645年~650年)
    • 白雉(650年~655年)
    • 斉明(さいめい)天皇(655年~661年)
    • 天智(てんぢ)天皇(662年~672年)
    • 天武(てんむ)天皇(673年~686年)
    • 朱鳥(しゅちょう、すちょう、あかみとり)(686年~687年)
    • 持統(じとう)天皇(687年~697年)
    • 文武(もんむ)天皇(697年~701年)
    • 大宝(たいほう)(701年~704年)元年に大宝律令が完成
    太字は元号。元号停止期間中は即位紀元が用いられていた

    View Slide

  21. 古代の和暦の紀年法をどうするか
    • 元号のみとすると「大宝」以前に元号停止期間があるので問題
    が生じる
    • 大宝以降のみを扱う案
    • 即位紀元を併用する案
    • 即位紀元を併用すれば停止期間を含めて表現可能
    • しかし最初の元号「大化」より以前の時代にすでに即位紀元が用いら
    れている
    • どこまで遡って対応するのか
    • 干支による年の表現をどうするか問題

    View Slide

  22. 干支による年の表現
    • 中国や日本では古代より干支によって年をあらわすことがされ
    てきた
    • 十干(甲・乙・丙・丁・戊・己・庚・辛・壬・癸)
    • 十二支(子・丑・寅・卯・辰・巳・午・未・申・酉・戌・亥)
    • これを組み合わせるが、甲子→乙丑→丙寅…とするため偶奇が
    組み合わさることがなく60通りとなる
    • 年をmod60したようなものと言える
    • 2023年は癸卯(みずのとう)で干支では40番目となる

    View Slide

  23. 干支による日の表現
    • 年とは独立に、日も干支で順に数える習慣がある
    • 2023年1月21日は干支の16番目、己卯(つちのと
    う)
    • 前日の金曜は15番目の戊寅(つちのえとら)
    • 明日の日曜は17番目の庚辰(かのえたつ)
    • 神武天皇の即位日は《辛酉年春正月 庚辰朔》
    • 辛酉年の正月の朔日(1日)が庚辰であるの意味
    • 「癸卯年己卯、行鰤会議」といった記述で年月が分
    かる仕組みとなっている
    • 使われている以上は算出したい

    View Slide

  24. 四文字の元号
    • 四文字年号時代(749年 - 770年)
    • 四文字の元号はこの5種でかつ連続して用いられた
    • 元号欄の表示幅は2文字ではダメ

    View Slide

  25. 即位紀元
    • 初期の元号利用の間にある即位紀元の表記方法をどうするか
    • (斉明)といった表記がされている例がある
    • 古代を扱うなら四文字元号もあるためいずれにせよ表示欄は漢
    字二文字では足りない。「斉明天皇」といった表記でも良いか
    もしれない
    • 古代の天皇は複数の名前があることがあるのでどの表記を用い
    るかも考えどころではある

    View Slide

  26. 3桁の年号
    古代の天皇はやたら長生き
    1. 景行天皇(第12代): 143歳
    2. 仁徳天皇(第16代): 143歳
    3. 垂仁天皇(第11代): 139歳
    4. 孝安天皇(第6代): 137歳
    5. 孝霊天皇(第7代): 128歳
    在位年数が最長なのは孝安天皇(第6代)で102年
    年号が2桁だと足りない
    孝安天皇102年の正月は戊戌(つちのえいぬ)
    日本書紀暦日原典より

    View Slide

  27. 南北朝時代
    南北朝時代には、持明院統(北朝)、
    大覚寺統(南朝)が独自に元号を制定
    したため、元徳3年/元弘元年(1331
    年)から元中9年/明徳3年(1392年)
    まで2つの元号が並存した
    • 現代では宮内庁を始め天皇の代数は
    南朝で数えるのが主流
    • 西暦の年と和暦の年は1対多関係

    View Slide

  28. 元嘉暦
    • 日本最古の暦法
    • 『宋書十三 志第三』 (沈約 487~502
    年ごろ?) に記載
    • 元嘉暦は比較的原始的な暦でメトン周
    期19太陽年 = 235朔望月 に基づく
    • 《章歳十九》《章月二百三十五》
    • アルゴリズムの一次資料に当たりたけ
    れば漢文を読む必要がある
    宋書十三 志第三

    View Slide

  29. 元嘉暦
    • 元嘉暦とより新しい儀鳳暦とが併用して用いられた
    • 《奉勅始行元嘉暦與儀鳳暦》
    • 中国では南朝の宋・斉・梁の諸王朝で、元嘉22年(445
    年)から天監8年(509年)までの65年間用いられた。
    • 百済では、宋における採用と同時に伝えられ、その滅亡
    の661年まで行用
    • 日本での暦の正式の採用は持統天皇6年(西暦692年) ※持
    統天皇4年説も
    日本書紀 巻30

    View Slide

  30. 平朔法
    • 元嘉暦は原始的な暦法で、月
    の満ち欠けの周期、朔望月を
    単純に 22207/752 ≒ 29.53
    日と置いている
    • 実際には平均29.53日で満ち
    欠けするが29.3~29.8日と幅
    がある
    • 平朔法ではこれを考慮しない

    View Slide

  31. 平気法
    • 二十四節気も単純に1年を24等分している
    • 元嘉暦では1太陽年 = 222070 / 608 ≒
    365.2467日
    • 実際には地球から見た太陽の動きは一定で
    はなく、冬に早く、夏は遅い
    • 地球の公転の楕円軌道の関係。近日点は1月
    あたり

    View Slide

  32. 元嘉暦の計算の概要
    • 月の朔日を求める
    • 二十四節気を求める
    • 中気を含む月を割り当てる
    • 中気を含まない月を閏月とする

    View Slide

  33. 元嘉暦の計算の概要
    《上元庚辰甲子紀首 … 至元嘉二十年癸未五千七百三年》
    元嘉二十年(西暦443)が上元(基準となるゼロ点)から5703年で
    ある。これを西暦0年からの値に直すと5260年
    日本暦日原典の解説によれば西暦x年の正月朔は
    1) (5260+x) × 235/19 = A …… 余り
    2) A×22207/752 = B …… 余りが朔の小余
    3) B÷60=C …… 余りが朔の大余

    View Slide

  34. 元嘉暦の計算の概要
    • メトン周期 19太陽年 = 235朔望月 に基づく
    • 1太陽年あたりの朔望月は 235/19
    • 1) で原点である上元からの年数にこれを掛ける
    • その端数が元旦での月の位置を表す
    • 1朔望月 = 22207/752 ≒ 29.53 日としている
    • 2)でこれを掛け、商が正月朔の日、余りが正月朔の時間となる
    • 3)で60で割って干支を求めている

    View Slide

  35. 元嘉暦の計算の概要
    日本暦日原典の解説によれば正月中は
    1)' (5260+x)×222070/608=A' …… 余りが中気の小余
    2)' A'÷60=B' …… 余りが中気の大余
    • 元嘉暦では1太陽年 = 222070 / 608 ≒ 365.2467日

    View Slide

  36. 儀鳳暦
    • 元嘉暦とともに日本最古の暦法
    • 持統天皇6年(西暦692年)より元嘉暦と儀鳳暦とが併用
    • 《奉勅始行元嘉暦與儀鳳暦》
    • 後に元嘉暦が廃され儀鳳暦が単独で用いられる
    • 中国では唐の麟徳二年(665)~開元十六年(728)の64年間
    • 元嘉暦が445年の暦であることを鑑みると当時最新の暦
    • 定朔法(月の満ち欠けの周期を考慮)
    • 破章法(メトン周期よりも精度を高める)

    View Slide

  37. 儀鳳暦の定気法
    • 儀鳳暦では1年を489428 / 1340 ≒
    365.2447 としている
    • これを24で割って太陽表の躔差率を
    加えて補正する
    • 日本ではこの補正を略して平気法で
    計算を行っていたようだ
    儀鳳暦の太陽表
    日本暦日原典より

    View Slide

  38. 儀鳳暦の定朔法
    • 月の満ち欠けの周期を表の値を用いて
    補正する
    • 日本での計算は簡素化した方法であっ
    ただろうとされている

    View Slide

  39. 日本書紀暦日原典
    • 日本書紀の暦日は5世紀なかばまでは儀鳳暦(但
    し平朔法)以後は元嘉暦によるものであること
    が知られる。
    • 日本書紀の暦日に就て 小川清彦(昭和21年)
    • 日本書紀暦日原典(内田正男 昭和53年)は日本書
    紀に出てくる約900の朔干支を、コンピュータ
    で算出した暦と照らし合わせて異同を参照でき
    るようにした本
    • 紀元前666年~紀元後697年まで

    View Slide

  40. 日本書紀の暦
    • 5世紀なかばまでは儀鳳暦
    • 以後は元嘉暦
    • 古い時代に新しい暦が用いら
    れている?
    • 日本では皇紀元年に中国より
    1300年進んだ暦を独自に開発
    して使っていたんだ!🤥
    • 紀元前433年のアテナイの数学
    者・メトンより早く(以下略

    View Slide

  41. 和暦ライブラリ
    • そんなあれこれに対応できる和暦の
    ライブラリを細々と書いています
    • Araragi (仮称)
    • グレゴリオ暦の実装 – 済
    • ユリウス暦の実装 – 済
    • 元嘉暦の実装 – 済
    • 儀鳳暦の実装 – 仕掛中
    • その他7暦法対応予定

    View Slide