zakuro 0.9.0 → 0.9.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (68) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +50 -178
  3. data/VERSION +1 -1
  4. data/doc/condition.md +38 -0
  5. data/doc/dropped_date.md +41 -0
  6. data/doc/expection.md +119 -0
  7. data/doc/operation/csv/month.csv +4 -4
  8. data/doc/operation/operation.xlsx +0 -0
  9. data/doc/usage.md +120 -0
  10. data/doc/vanished_date.md +86 -0
  11. data/doc/version/daien.md +163 -0
  12. data/doc/version/genka.md +116 -0
  13. data/doc/version/gihou.md +172 -0
  14. data/doc/version/section/common_post_process.md +60 -0
  15. data/doc/version/section/common_pre_process.md +185 -0
  16. data/doc/version/section/const.md +45 -0
  17. data/doc/version/section/decimal.md +101 -0
  18. data/doc/version/section/lunisolar_calendar.md +55 -0
  19. data/doc/version/section/senmyou_november_1st.md +41 -0
  20. data/{lib/zakuro/version/senmyou/README.md → doc/version/senmyou.md} +15 -168
  21. data/lib/zakuro/calculation/cycle/abstract_remainder.rb +58 -0
  22. data/lib/zakuro/calculation/era/gengou/abstract_scroll.rb +2 -2
  23. data/lib/zakuro/calculation/era/gengou/internal/reserve/abstract_range.rb +5 -5
  24. data/lib/zakuro/calculation/era/gengou/internal/reserve/named_range.rb +1 -1
  25. data/lib/zakuro/calculation/monthly/first_day.rb +9 -1
  26. data/lib/zakuro/calculation/monthly/operated_month.rb +18 -1
  27. data/lib/zakuro/calculation/option/vanished_date/abstract_parameter.rb +40 -0
  28. data/lib/zakuro/calculation/option/vanished_date/location.rb +84 -0
  29. data/lib/zakuro/calculation/range/medieval_annual_range.rb +5 -3
  30. data/lib/zakuro/calculation/range/transfer/gengou_scroller.rb +1 -0
  31. data/lib/zakuro/calculation/stella/lunar/abstract_location.rb +6 -2
  32. data/lib/zakuro/calculation/stella/lunar/choukei_value.rb +14 -0
  33. data/lib/zakuro/calculation/summary/internal/option.rb +71 -9
  34. data/lib/zakuro/context/option.rb +17 -0
  35. data/lib/zakuro/context/version_class_resolver.rb +17 -1
  36. data/lib/zakuro/era/japan/calendar.rb +2 -2
  37. data/lib/zakuro/era/japan/gengou/resource/validator.rb +2 -2
  38. data/lib/zakuro/era/western/calendar.rb +5 -11
  39. data/lib/zakuro/era/western/date_text.rb +40 -0
  40. data/lib/zakuro/gateway/locale/date.rb +2 -2
  41. data/lib/zakuro/operation/month/validator.rb +7 -1
  42. data/lib/zakuro/operation/yaml/month.yaml +14 -14
  43. data/lib/zakuro/result/data/option/vanished_date/calculation.rb +45 -0
  44. data/lib/zakuro/result/data/option/vanished_date/option.rb +47 -0
  45. data/lib/zakuro/result/data/single_day.rb +2 -0
  46. data/lib/zakuro/version/daien/const/number.rb +2 -0
  47. data/lib/zakuro/version/daien/const/remainder.rb +7 -2
  48. data/lib/zakuro/version/daien/cycle/remainder.rb +38 -20
  49. data/lib/zakuro/version/daien/monthly/lunar_phase.rb +2 -4
  50. data/lib/zakuro/version/daien/option/dropped_date/parameter.rb +5 -3
  51. data/lib/zakuro/version/daien/option/vanished_date/parameter.rb +33 -0
  52. data/lib/zakuro/version/daien/stella/lunar/location.rb +5 -8
  53. data/lib/zakuro/version/genka/cycle/remainder.rb +6 -2
  54. data/lib/zakuro/version/genka/monthly/lunar_phase.rb +14 -3
  55. data/lib/zakuro/version/genka/option/vanished_date/parameter.rb +31 -0
  56. data/lib/zakuro/version/gihou/const/remainder.rb +1 -5
  57. data/lib/zakuro/version/gihou/cycle/remainder.rb +0 -26
  58. data/lib/zakuro/version/gihou/monthly/lunar_phase.rb +2 -4
  59. data/lib/zakuro/version/gihou/option/vanished_date/parameter.rb +31 -0
  60. data/lib/zakuro/version/gihou/stella/lunar/location.rb +5 -8
  61. data/lib/zakuro/version/senmyou/const/number.rb +3 -1
  62. data/lib/zakuro/version/senmyou/const/remainder.rb +4 -2
  63. data/lib/zakuro/version/senmyou/cycle/remainder.rb +17 -34
  64. data/lib/zakuro/version/senmyou/monthly/lunar_phase.rb +5 -5
  65. data/lib/zakuro/version/senmyou/option/vanished_date/parameter.rb +33 -0
  66. data/lib/zakuro/version/senmyou/stella/lunar/location.rb +6 -8
  67. data/lib/zakuro/version/senmyou/stella/lunar/value.rb +9 -0
  68. metadata +25 -3
@@ -0,0 +1,60 @@
1
+ # 共通後処理
2
+
3
+ 元嘉暦では経朔、儀鳳暦以降では定朔を求めてきたが、さらに月ごとの固有値を求める
4
+
5
+ この計算は当月と次月の経朔/定朔を必要とするため、例として11月定朔/12月定朔を使うことにする
6
+
7
+ 一例として宣明暦をもとに進める
8
+
9
+ # 月の大小を求める
10
+
11
+ 太陰太陽暦において1ヶ月の日数は29日または30日である
12
+
13
+ 求め方は『日本暦日原典』凡例のp.6を参照した
14
+
15
+ これを求める上で、朔日の大余(1日を示す単位)を比較する
16
+
17
+ 例えば、 11月の朔日(定朔)が 52-2655 で、 12月の朔日(定朔)が 22-6780 の場合、52 と 22 を取り出し、 差分が10で割り切れるかを検証する
18
+
19
+ 52 - 22 = 30 は10で割り切れるため、これは11月は大の月(30日)である
20
+
21
+ もし割り切れない場合(差分が29の場合)は小の月(29日)である
22
+
23
+ なお、引用元では定朔の干支から求めているが、干支の元ネタが大余のため、実装の容易さから上記のような解説となった
24
+
25
+ # 二十四節気の所属を求める
26
+
27
+ その月が何月であるかは二十四節気の中気にあることはすでに述べた通りである
28
+
29
+ ここでは中気節気と月を対応させることにする
30
+
31
+ 求め方だがこれは確たる引用元がない
32
+
33
+ 『日本暦日原典』においても同著者の「宣明暦に関する研究」に遡っても言及がなかった
34
+
35
+ ただし以下のようにすれば『日本暦日原典』通りに求めることができる
36
+
37
+ 11月定朔を求める時に、前年冬至として 11-2730 を求めていた
38
+
39
+ また、 `気策(24分の1年)` (15-1835.5) が定義されており、二十四節気のそれぞれの間隔が固定値であることが分かる
40
+
41
+ つまり、 `前年冬至` (11-2730) + `気策(24分の1年)` (15-1835.5) = `小寒` (26-4565.5) ≒ 26-4565
42
+
43
+ 結果から秒は省略する(切り捨てる)
44
+
45
+ これを繰り返すことで二十四節気それぞれの値を得ることができる
46
+
47
+ (これは常気法の求め方であり、貞享暦以降の定気法では異なる)
48
+
49
+ もし前年冬至〜当年冬至まで処理を繰り返す場合は、単に24個分を求めるというよりは、
50
+ 前年大雪(前年冬至 - 気策)、当年冬至、当年小寒まで求めておいた方が良い
51
+
52
+ こうして得られた二十四節気を11月から順に比較していく
53
+
54
+ 11月を例に取ると、 11月定朔( 52-2655 ) <= 二十四節気 < 12月定朔(22-6780) である
55
+
56
+ すでに言及した通り大余は60で一巡して0になるため、範囲計算はそれを考慮して行う必要がある
57
+
58
+ 11月には前年大雪( 56-894 )と前年冬至( 11-2730 )が含まれているため、これが11月の中気/節気(取り上げた順番に従うと 節気/中気)となる
59
+
60
+ 以上の手続きで『日本暦日原典』通りの結果が得られる
@@ -0,0 +1,185 @@
1
+ # 共通前処理
2
+
3
+ 全暦で共通に行う求め方を記載する
4
+
5
+ これから記すことは原則として実装の問題であり、計算手順そのものは特定の資料に依拠するものではない
6
+
7
+ 『日本暦日原典』と同等の計算結果を出すためには、暦法編(同p.491〜)だけでは不十分である
8
+
9
+ 本ライブラリの主たる目的は、与えられた西暦日/和暦日から、対象の和暦日(和暦計算結果)を取りだすことにある
10
+
11
+ 設計方針として、最低限の範囲をもとに計算し、その結果を取得するようにしている
12
+
13
+ つまり、あらかじめ全範囲の計算済結果を用意し、それを検索するといったことをしていない
14
+
15
+ この方針を踏まえ、西暦日から和暦日を引き当てるための手順を記載する
16
+
17
+ # 元号
18
+ ## 元号の検索
19
+
20
+ 西暦年月日から対象の元号を特定する
21
+
22
+ 西暦日と元号の対応関係については、 [元号](../../gengou.md) に記載してある
23
+
24
+ 一例として、878年01月01日であれば、 `元慶( 877/06/01 ~ 885/03/10 )` の範囲内であることが分かる
25
+
26
+ これにより、該当の元号を特定できる
27
+
28
+ ## 範囲の詳細
29
+
30
+ 対象の西暦年月日をもとに、計算に必要な範囲を求める
31
+
32
+ これは和暦の特徴になるが、ある年の日数は計算するまで分からない
33
+
34
+ 例えば貞観2年を求めたい場合、貞観1年の日数がなければ2年目の元旦が分からない
35
+
36
+ これは太陽暦(グレゴリオ暦)だけでは想像しづらい手続きである
37
+
38
+ グレゴリオ暦は閏が規則的で、年だけで年日数を計算できる
39
+
40
+ 例えば2022年は357日(閏年)で、2021年は356日(平年)であると計算できる
41
+
42
+ 一方、和暦を計算する際は、1年目から愚直に2年目以降を計算しなければならない
43
+
44
+ 和暦の年日数は変則的であり、月の大小(29/30)や閏月(中気のない月)の有無により、
45
+
46
+ 平年(353/354/355/356)・閏年(383/384/385)のパターンがある
47
+
48
+ すでに元号の西暦開始日は特定しているので、1年目の開始年月日を特定し、
49
+
50
+ そこから2年目以降を計算することになる
51
+
52
+ このような前提を踏まえ、実際に計算範囲を求めるために次の条件で求める
53
+
54
+ ### 条件1
55
+
56
+ * 西暦開始日・終了日から計算する範囲を求める
57
+ * 西暦開始日・終了日の範囲内にある元号全てが対象となる
58
+
59
+ これは基本的なルールと言えるだろう
60
+
61
+ 求めたい範囲が 858/01/01 ~ 860/01/01 の場合、 `天安(857-03-20 ~ 859/05/19)` 、
62
+
63
+ `貞観(859/05/20 ~ 877/05/31)` が対象になる
64
+
65
+ ### 条件2
66
+
67
+ * 元号に応じて計算範囲は変化する
68
+ * 元号の開始日(改元日)が開始日よりも前であれば、結果開始日は前者になる
69
+ * 元号の終了日(改元前日)が終了日よりも後であれば、結果終了日は前者になる
70
+ * 南北朝のように複数元号に属する場合、より広い範囲の元号に合わせる
71
+
72
+ これは条件1の結果を踏まえ、計算範囲を拡大することを意味している
73
+
74
+ 先の 858/01/01 ~ 860/01/01 であれば、次の範囲まで拡大する
75
+
76
+ 857/03/20(天安の西暦開始日) ~ 877/05/31(貞観の西暦終了日)
77
+
78
+ また、南北朝のように複数元号であれば、より範囲に合わせることになる
79
+
80
+ 求めたい範囲が `暦応(1338/10/11 ~ 1342/05/31)` と `延元(1336/04/11 ~ 1340/05/24)`
81
+
82
+ のどちらにも該当する場合、次の範囲まで拡大する
83
+
84
+ 1338/10/11(暦応の西暦開始日) ~ 1340/05/24(延元の西暦終了日)
85
+
86
+ ### 条件3
87
+
88
+ * 属する元号よりもさらに範囲を広げる場合がある
89
+ * 開始日が最初の元号の改元後30日以内の場合、さらに前の元号まで対象にする
90
+ * 終了日が最後の元号の改元前日30日以内の場合、さらに次の元号まで対象にする
91
+
92
+ これは実際に施行された暦 / 計算された暦のズレを完全に解消するため追加した
93
+
94
+ 例えば、次のように年を跨いで月の位置づけ(名称)が変わるパターンがある
95
+
96
+ * 月初日(763/01/19): 1月 -> 閏12月
97
+ * 月初日(764/02/06): 閏12月 -> 1月
98
+
99
+ 仮に 764/02/06 が元号の開始日であったとする
100
+
101
+ この場合、その手前の月(763/01/19)の計算結果がないため、
102
+
103
+ その月が持っている情報(中気の情報)を対象の月(764/02/06)に寄せることができない
104
+
105
+ このような情報の欠落を防ぐため、前後でマージンを取ることにした
106
+
107
+ なお、これは宣明暦以前で実例がないため、あくまで仮定の話でしかない
108
+
109
+ 計算手順の汎用性を重んじ、あえて条件として追加している
110
+
111
+ # 暦
112
+ ## 暦の検索
113
+
114
+ 西暦年月日から対象の暦を特定する
115
+
116
+ 『日本暦日原典』を参考に、次の対応関係を抽出した
117
+
118
+ |開始日|暦 |
119
+ |:----|:----|
120
+ |445/01/24|元嘉暦|
121
+ |698/02/16|儀鳳暦|
122
+ |764/02/07|大衍暦|
123
+ |862/02/03|宣明暦|
124
+ |1685/02/04|貞享暦|
125
+ |1755/02/11|宝暦暦|
126
+ |1798/02/16|寛政暦|
127
+ |1844/02/18|天保暦|
128
+ |1872/12/09|グレゴリオ暦|
129
+
130
+ 一例として、450年01月01日であれば、 `元嘉暦` の範囲内であることが分かる
131
+
132
+ これにより、対象の年月日ではどの暦で計算すべきかを特定できる
133
+
134
+ ## 範囲の詳細
135
+
136
+ 元号での計算範囲をもとに、暦の計算範囲を定める
137
+
138
+ 基本的に、暦の施行日と、元号の改元日は重ならない
139
+
140
+ 例えば貞観3年までは大衍暦、貞観4年からは宣明暦となっている
141
+
142
+ 一例として、計算範囲が貞観の範囲内( `859-5-20 ~ 877/05/31` )である場合、
143
+
144
+ 暦の適用範囲は次の通りとなる
145
+
146
+ * 大衍暦:貞観開始日(859-5-20) 〜 大衍暦終了日(862/02/02)
147
+ * 宣明暦:宣明暦開始日(862/02/03) 〜 貞観終了日(877/05/31)
148
+
149
+ 仮に貞観5年を計算したい場合は、貞観3年までを大衍暦で計算し、
150
+
151
+ 貞観4年からは宣明暦で計算することで正しい年月日が得られることになる
152
+
153
+ # 年日数の計算
154
+
155
+ 元号の2年目以降の年月日を検索したい場合、それ以前の年日数を出さなければならない
156
+
157
+ これは暦によって異なり、大別して経朔 / 定朔の2種類がある
158
+
159
+ ## 定朔
160
+
161
+ 儀鳳暦以降は定朔まで求なければならない
162
+
163
+ 正慶1年の日数を出すための流れを図示する
164
+
165
+ ![各月の求め方](../../../images/各月の求め方.png)
166
+
167
+ 最後の「355日」を出すためには、月ごとの日数を出す必要がある
168
+
169
+ 月ごとの日数は定朔によって得られるが、それは経朔を補正することで得られる
170
+
171
+ 11月定朔に必要な「経朔」「入定気(二十四節気)」「月の進退」は冬至計算で求められる
172
+
173
+ 従って、まずは各年の冬至を求めなければならない
174
+
175
+ これらの計算の詳細についてはそれぞれの暦で解説する
176
+
177
+ ## 経朔
178
+
179
+ 元嘉暦は経朔まで求めれば良い
180
+
181
+ 従って、定朔を求めるための補正値は不要であり、経朔のまま月ごとの日数・年ごとの日数を算出できる
182
+
183
+ 冬至計算をする定朔とは異なり、正月朔日計算、正月中気計算をそれぞれ別に求める
184
+
185
+ 計算の詳細については元嘉暦で解説する
@@ -0,0 +1,45 @@
1
+ # 定数
2
+
3
+ 暦算で用いる定数を一覧にする
4
+
5
+ # 表
6
+
7
+ ## 共通
8
+
9
+ | | 元嘉暦 | 儀鳳暦 | 大衍暦 | 宣明暦 |
10
+ |-------------------|--------|-------------------|--------------------|---------------------|
11
+ | 大余 | 60 | 60 | 60 | 60 |
12
+ | 小余 | 752 | 1340 | 3040 | 8400 |
13
+ | 朔望月 | 22207 | 39571 | 89773 | 248057 |
14
+ | 積年 | 5703 | 269880 | 96961740 | 7070138 |
15
+ | 開始年 | 443 | 664 | 724 | 822 |
16
+ | 積年(西暦0年) | 1612 | | | |
17
+ | 余数 | 1595 | | | |
18
+ | 一年 | | 489428 | 1110343 | 3068055 |
19
+ | 通余 | | 7028 | 15943 | 44055 |
20
+ | 旬周(60日) | | 80400 | 182400 | 504000 |
21
+
22
+ ## 太陽
23
+
24
+ | | 元嘉暦 | 儀鳳暦 | 大衍暦 | 宣明暦 |
25
+ |-------------------|--------------------------|------------------|------------------|-------------------|
26
+ | 秒 | 4 | 6 | 24 | 8 |
27
+ | 気策(24分の1年) | 大余15小余66 + 11.0/24 秒0 | 大余15小余292秒5 | 大余15小余664秒7 | 大余15小余1835秒5 |
28
+ | 弦 | 大余7小余287秒3 | 大余7小余512秒4.5 | 大余7小余1163秒6 | 大余7小余3214秒2 |
29
+
30
+ ## 月
31
+
32
+ | | 元嘉暦 | 儀鳳暦 | 大衍暦 | 宣明暦 |
33
+ |-------------------|--------|-------------------|--------------------|---------------------|
34
+ | 秒 | | 12 | 80 | 100 |
35
+ | 1近点月 | | 大余27小余743秒1 | 大余27小余1685秒79 | 大余27小余4658秒19 |
36
+ | 暦中日 | | | | 大余13小余6529秒9.5 |
37
+ | 弦 | | 大余7小余512秒9 | 大余7小余1163秒20 | 大余7小余3214秒25 |
38
+
39
+ # 文献
40
+
41
+ * 『日本暦日原典〔第四版〕』
42
+ * 『歴代天文律暦等志彙編』中華書房
43
+ * 元嘉暦: 六
44
+ * 大衍暦: 七
45
+ * 『長慶宣明暦算法』
@@ -0,0 +1,101 @@
1
+ # 小数点以下の扱い
2
+
3
+ 『日本暦日原典』に記載はされていないが、実際の計算から推定した手順を記載する
4
+
5
+ # 小数点以下の切り捨て
6
+
7
+ 小数点以下桁数を2桁で四捨五入し、その後で小数点以下を切り捨てる
8
+
9
+ これは次の誤差が生じたことで判明した
10
+
11
+ ## 誤差一覧
12
+ `-` が『日本暦日原典』の結果を指す
13
+
14
+ ### 儀鳳暦
15
+ * 大宝 2年
16
+ ```
17
+ - 5 大 丁卯 3-1129 702 5 31 (12)22-138 (11)6-1185
18
+ + 5 大 丁卯 3-1128 702 5 31 (12)22-138 (11)6-1185
19
+ ```
20
+
21
+ * 養老 3年
22
+ ```
23
+ - 閏7 小 丁巳 53-767 719 8 20 (17)7-478
24
+ + 閏7 小 丁巳 53-768 719 8 20 (17)7-478
25
+ ```
26
+
27
+ ### 大衍暦
28
+ * 神護景雲 2年
29
+ ```
30
+ - 5 小 甲辰 40-632 768 5 21 (12)8-363 (11)52-2739
31
+ + 5 小 甲辰 40-633 768 5 21 (12)8-363 (11)52-2739
32
+ ```
33
+ * 仁寿 2年
34
+ ```
35
+ - 10 大 癸亥 59-1781 852 11 15 (22)0-2538 (23)16-162
36
+ + 10 大 癸亥 59-1782 852 11 15 (22)0-2538 (23)16-162
37
+ ```
38
+
39
+ ### 宣明暦
40
+ * 天暦 2年
41
+ ```
42
+ - 7 小 戊申 44-8274 948 8 8 (16)53-690 (17)8-2525
43
+ + 7 小 戊申 44-8275 948 8 8 (16)53-690 (17)8-2525
44
+ ```
45
+
46
+ * 仁平 2年
47
+ ```
48
+ - 354日 3 小 丙申 32-1497 1152 4 7 (8)41-2025 (9)56-3860
49
+ + 354日 3 小 丙申 32-1496 1152 4 7 (8)41-2025 (9)56-3860
50
+ ```
51
+
52
+ * 承久 2年
53
+ ```
54
+ - 庚辰 2 小 壬戌 58-7037 1220 3 7 (6)7-3693 (7)22-5529
55
+ + 庚辰 2 小 壬戌 58-7038 1220 3 7 (6)7-3693 (7)22-5529
56
+ ```
57
+
58
+ * 安貞 1年
59
+ ```
60
+ - 8 大 丁未 43-5913 1227 9 12 (18)46-6506 (19)1-8341
61
+ + 8 大 丁未 43-5912 1227 9 12 (18)46-6506 (19)1-8341
62
+ ```
63
+
64
+ * 永享 10年
65
+ ```
66
+ - 12 大 辛亥 47-2832 1438 12 17 (2)15-1196 (1)59-7760
67
+ + 12 大 辛亥 47-2833 1438 12 17 (2)15-1196 (1)59-7760
68
+ ```
69
+
70
+ ## 調査結果
71
+ 月の運行を求める際に生じた、小数点以下桁数による誤差である
72
+ 宣明暦で言えば、第14表を引き当てるための大余小余がずれている
73
+ まず、この大余小余は11月とそれより後の月で元となる値が異なる
74
+ * 11月の場合は [宣明暦](../senmyou.md) の `月の進退から月の運動の補正値を求める` に記載の通りである
75
+ * それより後の月の場合は 弦を4回ずつ加算することで得られる
76
+ 仮に閏月がない年とした場合、11月に弦を4回足せば12月、8回足せば1月といった求め方をする
77
+
78
+ この大余小余のうち、小余の小数点以下と、秒を小余に置き直した結果を合算し、小余に繰り上げる処理を行なっているが、この繰上げが噛み合っていない
79
+ zakuroでは次の表の合算値を切り捨てているが、『日本暦日原典』では切り上げている
80
+
81
+ ### 儀鳳暦
82
+ |小余|小余(秒 / 12)|合算|
83
+ |:----|:----|:----|
84
+ |950.4999913|0.5|950.9999913|
85
+ |390.7499913|0.25|390.9999913|
86
+
87
+ ### 大衍暦
88
+ |小余|小余(秒 / 80)|合算|
89
+ |:----|:----|:----|
90
+ |1697.921259|0.075|1697.996259|
91
+ |2656.833759|0.1625|2656.996259|
92
+
93
+ ### 宣明暦
94
+ |小余|小余(秒 / 100)|合算|
95
+ |:----|:----|:----|
96
+ |6291.709782|0.29|6291.999782|
97
+ |361.9497818|0.05|361.9997818|
98
+ |5470.569782|0.43|5470.999782|
99
+ |4552.089782|0.91|4552.999782|
100
+ |2161.659782|0.34|2161.999782|
101
+
@@ -0,0 +1,55 @@
1
+ # 太陰太陽暦
2
+
3
+ 和暦は太陰太陽暦である
4
+
5
+ 太陰太陽暦の文化的・歴史的な背景には触れず、ここでは暦計算する上で必要なことのみ言及する
6
+
7
+ 私たち現代の日本人が使うグレゴリオ暦は太陽暦である
8
+
9
+ 太陽暦は `年` を太陽に対する公転周期、 `日` を地球の自転周期で求める
10
+
11
+ 太陰太陽暦はそれに加えて、`月` を月の満ち欠けの周期(朔望月)に合わせる
12
+
13
+ 本来この `年` と `月` の周期には何らかの関連性はなく、暦の側で辻褄合わせする必要がある
14
+
15
+ (今回は触れないが、メトン周期はこのような辻褄合わせの一つである)
16
+
17
+ `年` の太陽年は約365.24日、 `月` の1朔望月は約29.5日である
18
+
19
+ 1朔望月 * 12 = 354日であり、 1太陽年には常に約11日ほど満たないことになる
20
+
21
+ 古代中国人はこれを12ヶ月の平年(353/354/355/356日)と、13ヶ月の閏年(383/384/385日)で解決した
22
+
23
+ 問題は1年に含まれる朔望月のそれぞれを1月、2月...などと位置付けるのか
24
+
25
+ これを理解するために、元弘元年-元弘2年を例にする
26
+
27
+ ![太陽と月](../../../images/太陽と月.png)
28
+
29
+ 「定朔」は月の始まりを示す
30
+
31
+ 毎月1日の始まりであり、ここから次の月までは1朔望月かかる
32
+
33
+ (「定朔」は儀鳳暦以降に用いられており、元嘉暦は「平朔」となる)
34
+
35
+ 具体的に言えば、朔月(新月)-> 上弦 -> 望月(満月) -> 下弦 -> 次の朔月(新月)と約29.5日かけて移り変わる
36
+
37
+ 下の「黄経」は(地球から見える)太陽の位置を示し、360度で1太陽年が経過する
38
+
39
+ この黄経15度ごとに名前が与えられており、これを「二十四節気」と呼ぶ
40
+
41
+ 宣明暦ではこの定朔の範囲にどの二十四節気が含まれるかを計算し、中気に対応する月名を与えている
42
+
43
+ 11月を例に取ると、「3-2240」と「33-6480」の間には大雪(「13-4659」)と冬至(「28-6495」)が含まれている
44
+
45
+ この大余小余(xx-xxxx)の表現を細かくは説明しないが、とりあえずは左側の数字だけ見ていただければ良い
46
+
47
+ この冬至は11月の中気であり、これが含まれている1朔望月を「11月」と呼ぶ
48
+
49
+ 次に閏2月を例に取ると、中気が一つも含まれていないことが分かる
50
+
51
+ 「1-329」と「30-4043」の間には節気しかない
52
+
53
+ これを閏月と呼び、これが含まれる元弘3年は13ヶ月ある閏年になる
54
+
55
+ このように、太陰太陽暦では太陽の位置を24分割し、月の所属を明らかにする方法を取っている
@@ -0,0 +1,41 @@
1
+ # 宣明暦の11月朔日計算
2
+
3
+ 『日本暦日原典』『長慶宣明暦算法』では入定気の計算が不完全である
4
+
5
+ 天正閏余を求めた後で、大雪定数/小雪定数を差し引きしているが、立冬定数を利用する例がない
6
+
7
+ # 計算失敗例
8
+
9
+ 次の年では計算に失敗していた
10
+
11
+ | 対応年 | 文献(月) | 文献(大余小余) | 計算(月) | 計算(大余小余) | 天正閏余 |
12
+ | ------ | ---------- | ---------------- | ---------- | ---------------- | -------- |
13
+ | 1032 | 閏10 | 41-7048 | 閏10 | 41-676 | 29-4185 |
14
+ | 1051 | 11 | 20-5089 | 閏10 | 21-7118 | 29-3835 |
15
+ | 1070 | 11 | 0-822 | 11 | 0-2851 | 29-3485 |
16
+ | 1089 | 閏10 | 39-3508 | 閏10 | 39-5538 | 29-3135 |
17
+ | 1108 | 閏10 | 19-7769 | 閏10 | 19-1400 | 29-2785 |
18
+ | 1127 | 閏10 | 58-5899 | 閏10 | 59-7931 | 29-2435 |
19
+ | 1146 | 閏10 | 38-6128 | 閏10 | 39-8161 | 29-2085 |
20
+ | 1165 | 11 | 18-5932 | 閏10 | 19-7966 | 29-1735 |
21
+ | 1184 | 11 | 58-3492 | 閏10 | 58-5526 | 29-1385 |
22
+
23
+ # 原因
24
+
25
+ 小雪定数(14-5235.5)と大雪定数(14-4235.5)の和は `29-1071.3` である
26
+
27
+ 小雪・大雪の範囲を突き抜け、さらにその手前の立冬にまで進入したことを示している
28
+
29
+ ![入定気の起算](../../../images/入定気の起算.png)
30
+
31
+ # 対策
32
+
33
+ パターンCのケースを追加する
34
+
35
+ a: `大雪定数` (14-5235.5) - `天正閏余`
36
+
37
+ b: `小雪定数` (14-4235.5) - ( `天正閏余` - `大雪定数` (14-5235.5))
38
+
39
+ c: `立冬定数` (14-6235.5) - ( `天正閏余` - ( `大雪定数` (14-5235.5) + `小雪定数` (14-4235.5) ) )
40
+
41
+