when_exe 0.3.6 → 0.3.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +171 -0
  3. data/lib/when_exe.rb +78 -47
  4. data/lib/when_exe/basictypes.rb +752 -747
  5. data/lib/when_exe/calendarnote.rb +805 -801
  6. data/lib/when_exe/calendartypes.rb +1583 -1531
  7. data/lib/when_exe/coordinates.rb +16 -15
  8. data/lib/when_exe/core/duration.rb +114 -110
  9. data/lib/when_exe/core/extension.rb +504 -504
  10. data/lib/when_exe/ephemeris.rb +1917 -1913
  11. data/lib/when_exe/ephemeris/moon.rb +333 -333
  12. data/lib/when_exe/ephemeris/notes.rb +389 -387
  13. data/lib/when_exe/ephemeris/planets.rb +585 -585
  14. data/lib/when_exe/ephemeris/sun.rb +214 -214
  15. data/lib/when_exe/googlecalendar.rb +144 -140
  16. data/lib/when_exe/icalendar.rb +1636 -1636
  17. data/lib/when_exe/inspect.rb +46 -22
  18. data/lib/when_exe/locales/akt.rb +176 -176
  19. data/lib/when_exe/locales/encoding_conversion.rb +134 -126
  20. data/lib/when_exe/locales/iast.rb +90 -90
  21. data/lib/when_exe/locales/locale.rb +750 -746
  22. data/lib/when_exe/locales/transliteration_table.rb +62 -62
  23. data/lib/when_exe/mini_application.rb +307 -305
  24. data/lib/when_exe/parts/enumerator.rb +2 -2
  25. data/lib/when_exe/parts/geometric_complex.rb +397 -397
  26. data/lib/when_exe/parts/method_cash.rb +224 -224
  27. data/lib/when_exe/parts/resource.rb +1069 -1071
  28. data/lib/when_exe/parts/timezone.rb +240 -230
  29. data/lib/when_exe/region/armenian.rb +56 -56
  30. data/lib/when_exe/region/babylonian.rb +405 -0
  31. data/lib/when_exe/region/bahai.rb +146 -146
  32. data/lib/when_exe/region/balinese.rb +622 -622
  33. data/lib/when_exe/region/chinese.rb +95 -25
  34. data/lib/when_exe/region/chinese/calendars.rb +1016 -1016
  35. data/lib/when_exe/region/chinese/epochs.rb +1 -1
  36. data/lib/when_exe/region/chinese/twins.rb +803 -795
  37. data/lib/when_exe/region/christian.rb +824 -824
  38. data/lib/when_exe/region/coptic.rb +106 -87
  39. data/lib/when_exe/region/discordian.rb +225 -225
  40. data/lib/when_exe/region/far_east.rb +188 -188
  41. data/lib/when_exe/region/french.rb +56 -56
  42. data/lib/when_exe/region/geologicalage.rb +639 -639
  43. data/lib/when_exe/region/goddess.rb +58 -58
  44. data/lib/when_exe/region/indian.rb +1254 -1251
  45. data/lib/when_exe/region/iranian.rb +8 -8
  46. data/lib/when_exe/region/islamic.rb +3 -3
  47. data/lib/when_exe/region/japanese.rb +93 -99
  48. data/lib/when_exe/region/japanese/calendars.rb +396 -397
  49. data/lib/when_exe/region/japanese/epochs.rb +26 -26
  50. data/lib/when_exe/region/japanese/nihon_shoki.rb +71 -71
  51. data/lib/when_exe/region/japanese/notes.rb +1383 -1386
  52. data/lib/when_exe/region/japanese/residues.rb +1306 -1306
  53. data/lib/when_exe/region/japanese/twins.rb +225 -225
  54. data/lib/when_exe/region/japanese/weeks.rb +112 -0
  55. data/lib/when_exe/region/javanese.rb +230 -230
  56. data/lib/when_exe/region/jewish.rb +126 -126
  57. data/lib/when_exe/region/korean.rb +378 -378
  58. data/lib/when_exe/region/m17n.rb +114 -113
  59. data/lib/when_exe/region/martian.rb +258 -255
  60. data/lib/when_exe/region/mayan.rb +32 -32
  61. data/lib/when_exe/region/residue.rb +89 -89
  62. data/lib/when_exe/region/roman.rb +36 -24
  63. data/lib/when_exe/region/ryukyu.rb +97 -97
  64. data/lib/when_exe/region/shire.rb +240 -240
  65. data/lib/when_exe/region/soviet.rb +209 -0
  66. data/lib/when_exe/region/symmetry.rb +50 -50
  67. data/lib/when_exe/region/thai.rb +336 -335
  68. data/lib/when_exe/region/tibetan.rb +316 -315
  69. data/lib/when_exe/region/vietnamese.rb +440 -439
  70. data/lib/when_exe/region/weekdate.rb +80 -80
  71. data/lib/when_exe/region/world.rb +175 -175
  72. data/lib/when_exe/region/yerm.rb +14 -14
  73. data/lib/when_exe/region/zoroastrian.rb +203 -203
  74. data/lib/when_exe/timestandard.rb +707 -681
  75. data/lib/when_exe/tmduration.rb +338 -330
  76. data/lib/when_exe/tmobjects.rb +1346 -1325
  77. data/lib/when_exe/tmposition.rb +2115 -2072
  78. data/lib/when_exe/tmreference.rb +1693 -1669
  79. data/lib/when_exe/version.rb +1 -1
  80. data/link_to_online_documents +1 -1
  81. data/test/examples/JapanHolidaysRFC6350.ics +1 -1
  82. data/test/test.rb +67 -61
  83. data/test/test/basictypes.rb +409 -409
  84. data/test/test/calendarnote.rb +86 -69
  85. data/test/test/calendartypes.rb +97 -97
  86. data/test/test/coordinates.rb +396 -396
  87. data/test/test/ephemeris.rb +83 -74
  88. data/test/test/ephemeris/moon.rb +14 -14
  89. data/test/test/ephemeris/planets.rb +14 -14
  90. data/test/test/ephemeris/sun.rb +14 -14
  91. data/test/test/googlecalendar.rb +194 -176
  92. data/test/test/icalendar.rb +867 -858
  93. data/test/test/inspect.rb +117 -117
  94. data/test/test/parts.rb +487 -487
  95. data/test/test/region/balinese.rb +34 -0
  96. data/test/test/region/chinese.rb +218 -206
  97. data/test/test/region/christian.rb +245 -245
  98. data/test/test/region/coptic.rb +27 -27
  99. data/test/test/region/french.rb +33 -33
  100. data/test/test/region/geologicalage.rb +17 -17
  101. data/test/test/region/indian.rb +57 -57
  102. data/test/test/region/iran.rb +54 -54
  103. data/test/test/region/islamic.rb +18 -18
  104. data/test/test/region/japanese.rb +237 -219
  105. data/test/test/region/jewish.rb +61 -61
  106. data/test/test/region/m17n.rb +184 -184
  107. data/test/test/region/mayan.rb +195 -195
  108. data/test/test/region/residue.rb +147 -139
  109. data/test/test/region/thai.rb +116 -116
  110. data/test/test/region/tibetan.rb +30 -30
  111. data/test/test/region/vietnamese.rb +102 -102
  112. data/test/test/region/yerm.rb +146 -146
  113. data/test/test/timestandard.rb +81 -81
  114. data/test/test/tmobjects.rb +328 -328
  115. data/test/test/tmposition.rb +397 -284
  116. data/test/test/tmreference.rb +157 -157
  117. metadata +13 -10
@@ -1,225 +1,225 @@
1
- # -*- coding: utf-8 -*-
2
- =begin
3
- Copyright (C) 2014 Takashi SUGA
4
-
5
- You may use and/or modify this file according to the license described in the LICENSE.txt file included in this archive.
6
- =end
7
-
8
- module When
9
-
10
- class TM::CalendarEra
11
-
12
- # Japanese Luni-Solar Calendar Series for Japanese Note
13
- JapaneseLuniSolar = [self, [
14
- 'locale:[ja=ja:, en=en:]',
15
- 'area:[日本の暦月=, *JapaneseLuniSolar=]',
16
- ['[平朔儀鳳暦=]-660.01.01', '@F', "-660-01-01^JapaneseTwin::平朔儀鳳暦"],
17
- ['[元嘉暦]454.01.01', '@CR', "454-01-01^ChineseTwin::元嘉暦"],
18
- ['[儀鳳暦]697.01.01', '@CR', "697-01-01^ChineseTwin::麟徳暦"],
19
- ['[大衍暦]764.01.01', '@CR', "764-01-01^ChineseTwin::大衍暦"],
20
- ['[五紀暦]858.01.01', '@CR', "858-01-01^ChineseTwin::五紀暦"],
21
- ['[宣明暦]862.01.01', '@CR', "862-01-01^ChineseTwin::宣明暦"],
22
- ['[貞享乙丑暦=]1685.01.01', '@CR', "1685-01-01^JapaneseTwin::貞享乙丑暦"],
23
- ['[貞享暦]1687.01.01', '@CR', "1687-01-01^JapaneseTwin::貞享暦" ],
24
- ['[宝暦癸酉暦=]1753.01.01', '@CR', "1753-01-01^JapaneseTwin::宝暦癸酉暦"],
25
- ['[宝暦甲戌暦=]1754.01.01', '@CR', "1754-01-01^JapaneseTwin::宝暦甲戌暦"],
26
- ['[宝暦暦]1755.01.01', '@CR', "1755-01-01^JapaneseTwin::宝暦暦" ],
27
- ['[修正宝暦暦=]1771.01.01', '@CR', "1771-01-01^JapaneseTwin::修正宝暦暦"],
28
- ['[寛政暦]1798.01.01', '@CR', "1798-01-01^JapaneseTwin::寛政暦" ], # 京都平均太陽時
29
- ['[寛政丁亥暦]1827.01.01', '@CR', "1827-01-01^JapaneseTwin::寛政丁亥暦"], # 京都平均太陽時
30
- ['[天保暦]1844.01.01', '@CR', "1844-01-01^JapaneseTwin::天保暦" ], # 京都真太陽時
31
- ['[旧々暦=,*JSO=]1872.12.03','@CR', "1872-12-03^JapaneseTwin::旧々暦" ], # 東京平均太陽時
32
- ['[旧暦,*JS=]1887.11.18', '@CR', "1887-11-18^JapaneseTwin::旧暦" ] # 日本標準時
33
- ]]
34
-
35
- # Japanese Solar Calendar Series for Japanese Note
36
- JapaneseSolar = [self, [
37
- 'locale:[ja=ja:, en=en:]',
38
- 'area:[日本の節月=, *JapaneseSolar=]',
39
- ['[平朔儀鳳暦=]-661.01.01', '@F', "-661-01-01^JapaneseTwin::平朔儀鳳暦(節月)"], # 年の始めに遡って開始(実際は12.22)
40
- ['[元嘉暦]454.01.12', '@CR', "454-01-12^ChineseTwin::元嘉暦(節月)"],
41
- ['[儀鳳暦]696.12.27', '@CR', "696-12-27^ChineseTwin::麟徳暦(節月)"],
42
- ['[大衍暦]764.01.06', '@CR', "764-01-06^ChineseTwin::大衍暦(節月)"],
43
- ['[五紀暦]857.12.19', '@CR', "857-12-19^ChineseTwin::五紀暦(節月)"],
44
- ['[宣明暦]862.01.03', '@CR', "862-01-03^ChineseTwin::宣明暦(節月)"],
45
- ['[貞享乙丑暦=]1685.01.01', '@CR', "1685-01-01^JapaneseTwin::貞享乙丑暦(節月)"],
46
- ['[貞享暦]1687.01.08', '@CR', "1687-01-08^JapaneseTwin::貞享暦(節月)" ],
47
- ['[宝暦癸酉暦=]1752.12.30', '@CR', "1752-12-30^JapaneseTwin::宝暦癸酉暦(節月)"],
48
- ['[宝暦甲戌暦=]1753.12.19', '@CR', "1753-12-19^JapaneseTwin::宝暦甲戌暦(節月)"],
49
- ['[宝暦暦]1755.01.07', '@CR', "1755-01-07^JapaneseTwin::宝暦暦(節月)" ],
50
- ['[修正宝暦暦=]1771.01.11', '@CR', "1771-01-11^JapaneseTwin::修正宝暦暦(節月)"],
51
- ['[寛政暦]1798.01.12', '@CR', "1798-01-12^JapaneseTwin::寛政暦(節月)" ],
52
- ['[寛政丁亥暦]1826.12.22', '@CR', "1826-12-22^JapaneseTwin::寛政丁亥暦(節月)"],
53
- ['[天保暦]1844.01.14', '@CR', "1844-01-14^JapaneseTwin::天保暦(節月)" ], # 京都真太陽時
54
- ['[旧々暦=,*JSO=]1872.11.26','@CR', "1872-11-26^JapaneseTwin::旧々暦(節月)" ], # 東京平均太陽時
55
- ['[旧暦,*JS=]1887.11.26', '@CR', "1887-11-26^JapaneseTwin::旧暦(節月)" ] # 日本標準時
56
- ]]
57
- end
58
-
59
- module CalendarTypes
60
-
61
- _japanese_common = {
62
- 'year_delta' => 1, # 冬至年の変化率 / (10^(-6)日/年)
63
- 'year_span' => 1, # 冬至年の改訂周期 / 年
64
- 'lunation_length' => 29.530590, # 朔実(朔望月)
65
- 'lunar_mean_motion' => 13.36875, # 月平行(恒星天に対する月の平均運動 / 日)
66
- 'anomalistic_month_length' => 27.5546, # 転終(近点月)
67
- 'anomaly_method' => 'c', # (経朔-定朔)の計算方法(a:差分, b:微分, c:幾何学的補正)
68
- 'anomaly_precision' => 1e-5, # c 方式 での収束判定誤差 / 日
69
- 'lunar_unit' => 0.1, # 太陰遅速計算用招差法定数の時間の単位(限)
70
- 'solar_weight' => 1, # (経朔-定朔)の計算で用いる実行差での太陽盈縮の重み(0:非考慮,1:考慮)
71
- 'm' => [ # 太陰遅速計算用招差法定数
72
- [ 0 ... 72.65342, 0, [-0, -1173_1000, +3_7000, +400]],
73
- [ 72.65342...137.773, 137.773, [-0, -1324_0000, +5_2000, +500]],
74
- [137.773 ...202.89258, 137.773, [+0, +1324_0000, -5_2000, -500]],
75
- [202.89258.. 275.546, 275.546, [+0, +1173_1000, -3_7000, -400]]
76
- ],
77
- 's' => [ # 太陽盈縮計算用招差法定数
78
- [ 0 ... 89.25392, 0, [0, +436_0000, -2_0000, -34]],
79
- [ 89.25392 ...182.620848, 182.620848, [0, +411_9800, -1_7640, -31]],
80
- [182.620848...275.987776, 182.620848, [0, -411_9800, +1_7640, +31]],
81
- [275.987776.. 365.241696, 365.241696, [0, -436_0000, +2_0000, +34]]
82
- ]
83
- }
84
-
85
- JapaneseTwin = [{}, When::BasicTypes::M17n, ChineseSolar.twin('JapaneseTwin', [
86
- "locale:[=ja:, en=en:, alias]",
87
- "area:[日本,Japan]",
88
-
89
- [ChineseLuniSolar,
90
- 'name:[平朔儀鳳暦=]',
91
- 'formula:MeanLunation?year_length=122357/335&lunation_length=39571/1340&day_epoch=-96608689'
92
- ],
93
-
94
- [ChineseLuniSolar,
95
- 'name:[貞享乙丑暦=]',
96
- {'formula'=>['12S', '1L'].map {|f| [
97
- Ephemeris::ChineseTrueLunation, _japanese_common.merge({
98
- 'formula' => f,
99
- 'day_epoch' => 2336111 + 7.675, # 暦元天正冬至のユリウス日
100
- 'year_epoch' => 1684, # 暦元の西暦年
101
- 'year_length' => 365.241696, # 暦元の冬至年 / 日
102
- 'anomalistic_year_shift' => 6.445, # 暦應(冬至から近日点通過までの日数)
103
- 'lunation_shift' => 2.779 - 0.015, # 閏應(暦元前経朔から暦元天正冬至までの日数)
104
- 'anomalistic_month_shift' => 22.72 - 0.015 # 転應(暦元前近/遠地点通過から暦元天正冬至までの日数)
105
- })]
106
- }
107
- }
108
- ],
109
-
110
- [ChineseLuniSolar,
111
- 'name:[貞享暦]',
112
- {'formula'=>['12S', '1L'].map {|f| [
113
- Ephemeris::ChineseTrueLunation, _japanese_common.merge({
114
- 'formula' => f,
115
- 'day_epoch' => 2336111 + 7.69 , # 暦元天正冬至のユリウス日
116
- 'year_epoch' => 1684, # 暦元の西暦年
117
- 'year_length' => 365.241696, # 暦元の冬至年 / 日
118
- 'anomalistic_year_shift' => 6.445, # 暦應(冬至から近日点通過までの日数)
119
- 'lunation_shift' => 2.779, # 閏應(暦元前経朔から暦元天正冬至までの日数)
120
- 'anomalistic_month_shift' => 22.72 # 転應(暦元前近/遠地点通過から暦元天正冬至までの日数)
121
- })]
122
- }
123
- }
124
- ],
125
-
126
- [ChineseLuniSolar,
127
- 'name:[宝暦癸酉暦=]',
128
- {'formula'=>['12S', '1L'].map {|f| [
129
- Ephemeris::ChineseTrueLunation, _japanese_common.merge({
130
- 'formula' => f,
131
- 'day_epoch' => 2336111 + 7.9038,# 暦元天正冬至のユリウス日
132
- 'year_epoch' => 1684, # 暦元の西暦年
133
- 'year_length' => 365.241696, # 暦元の冬至年 / 日
134
- 'anomalistic_year_shift' => 6.445, # 暦應(冬至から近日点通過までの日数)
135
- 'lunation_shift' => 2.779 + 0.2138, # 閏應(暦元前経朔から暦元天正冬至までの日数)
136
- 'anomalistic_month_shift' => 22.72 + 0.2138 # 転應(暦元前近/遠地点通過から暦元天正冬至までの日数)
137
- })]
138
- }
139
- }
140
- ],
141
-
142
- [ChineseLuniSolar,
143
- 'name:[宝暦甲戌暦=]',
144
- {'formula'=>['12S', '1L'].map {|f| [
145
- Ephemeris::ChineseTrueLunation, _japanese_common.merge({
146
- 'formula' => f,
147
- 'day_epoch' => 2336111 + 7.6223,# 暦元天正冬至のユリウス日
148
- 'year_epoch' => 1684, # 暦元の西暦年
149
- 'year_length' => 365.241696, # 暦元の冬至年 / 日
150
- 'anomalistic_year_shift' => 6.445, # 暦應(冬至から近日点通過までの日数)
151
- 'lunation_shift' => 2.779 - 0.0677, # 閏應(暦元前経朔から暦元天正冬至までの日数)
152
- 'anomalistic_month_shift' => 22.72 - 0.0677 # 転應(暦元前近/遠地点通過から暦元天正冬至までの日数)
153
- })]
154
- }
155
- }
156
- ],
157
-
158
- [ChineseLuniSolar,
159
- 'name:[宝暦暦]',
160
- {'formula'=>['12S', '1L'].map {|f| [
161
- Ephemeris::ChineseTrueLunation, _japanese_common.merge({
162
- 'formula' => f,
163
- 'day_epoch' => 2361671 + 14.536, # 暦元天正冬至のユリウス日
164
- 'year_epoch' => 1754, # 暦元の西暦年
165
- 'year_length' => 365.241556, # 暦元の冬至年 / 日
166
- 'anomalistic_year_shift' => 6.455, # 暦應(冬至から近日点通過までの日数)
167
- 'lunation_shift' => 25.654, # 閏應(暦元前経朔から暦元天正冬至までの日数)
168
- 'anomalistic_month_shift' => 18.88, # 転應(暦元前近/遠地点通過から暦元天正冬至までの日数)
169
- 's' => ChineseSolar.change_unit(365.241556 / 365.241696, _japanese_common['s'])
170
- })]
171
- }
172
- }
173
- ],
174
-
175
- [ChineseLuniSolar,
176
- 'name:[修正宝暦暦=]',
177
- {'formula'=>['12S', '1L'].map {|f| [
178
- Ephemeris::ChineseTrueLunation, _japanese_common.merge({
179
- 'formula' => f,
180
- 'day_epoch' => 2361671 + 14.681, # 暦元天正冬至のユリウス日
181
- 'year_epoch' => 1754, # 暦元の西暦年
182
- 'year_length' => 365.241626, # 暦元の冬至年 / 日
183
- 'anomalistic_year_shift' => 7.42, # 暦應(冬至から近日点通過までの日数)
184
- 'lunation_shift' => 25.82, # 閏應(暦元前経朔から暦元天正冬至までの日数)
185
- 'anomalistic_month_shift' => 19.307, # 転應(暦元前近/遠地点通過から暦元天正冬至までの日数)
186
- 's' => ChineseSolar.change_unit(365.241626 / 365.241696, _japanese_common['s'])
187
- })]
188
- }
189
- }
190
- ],
191
-
192
- [ChineseLuniSolar,
193
- 'name:[寛政暦]',
194
- 'time_basis:+00,+09:03:01', # 寛政9天正冬至.107112
195
- {'formula'=>['ChineseTrueLunation?day_epoch=2377391.107112&year_epoch=1797&year_length=365.242347071&year_delta=-0.217685&year_span=1000',
196
- 'Formula']}
197
- ],
198
-
199
- [ChineseLuniSolar,
200
- 'name:[寛政丁亥暦]',
201
- 'time_basis:+00,+09:03:01', # 寛政9天正冬至.107112
202
- {'formula'=>['ChineseTrueLunation?day_epoch=2377391.107112&year_epoch=1797&year_length=365.242347071&year_delta=-0.217685&year_span=10',
203
- 'Formula']}
204
- ],
205
-
206
- [ChineseLuniSolar,
207
- 'name:[天保暦]',
208
- 'time_basis:LAT?long=135.4520E&lat=35.0117N',
209
- 'intercalary_span:3'
210
- ],
211
-
212
- [ChineseLuniSolar,
213
- 'name:[旧々暦=]',
214
- 'time_basis:+09:18:59',
215
- 'intercalary_span:3'
216
- ],
217
-
218
- [ChineseLuniSolar,
219
- 'name:[旧暦]',
220
- 'time_basis:+09:00',
221
- 'intercalary_span:3'
222
- ]
223
- ])]
224
- end
225
- end
1
+ # -*- coding: utf-8 -*-
2
+ =begin
3
+ Copyright (C) 2014 Takashi SUGA
4
+
5
+ You may use and/or modify this file according to the license described in the LICENSE.txt file included in this archive.
6
+ =end
7
+
8
+ module When
9
+
10
+ class TM::CalendarEra
11
+
12
+ # Japanese Luni-Solar Calendar Series for Japanese Note
13
+ JapaneseLuniSolar = [self, [
14
+ 'locale:[=ja:, en=en:]',
15
+ 'area:[日本の暦月=, *JapaneseLuniSolar=]',
16
+ ['[平朔儀鳳暦=]-660.01.01', '@F', "-660-01-01^JapaneseTwin::平朔儀鳳暦"],
17
+ ['[元嘉暦]454.01.01', '@CR', "454-01-01^ChineseTwin::元嘉暦"],
18
+ ['[儀鳳暦]697.01.01', '@CR', "697-01-01^ChineseTwin::麟徳暦"],
19
+ ['[大衍暦]764.01.01', '@CR', "764-01-01^ChineseTwin::大衍暦"],
20
+ ['[五紀暦]858.01.01', '@CR', "858-01-01^ChineseTwin::五紀暦"],
21
+ ['[宣明暦]862.01.01', '@CR', "862-01-01^ChineseTwin::宣明暦"],
22
+ ['[貞享乙丑暦=]1685.01.01', '@CR', "1685-01-01^JapaneseTwin::貞享乙丑暦"],
23
+ ['[貞享暦]1687.01.01', '@CR', "1687-01-01^JapaneseTwin::貞享暦" ],
24
+ ['[宝暦癸酉暦=]1753.01.01', '@CR', "1753-01-01^JapaneseTwin::宝暦癸酉暦"],
25
+ ['[宝暦甲戌暦=]1754.01.01', '@CR', "1754-01-01^JapaneseTwin::宝暦甲戌暦"],
26
+ ['[宝暦暦]1755.01.01', '@CR', "1755-01-01^JapaneseTwin::宝暦暦" ],
27
+ ['[修正宝暦暦=]1771.01.01', '@CR', "1771-01-01^JapaneseTwin::修正宝暦暦"],
28
+ ['[寛政暦]1798.01.01', '@CR', "1798-01-01^JapaneseTwin::寛政暦" ], # 京都平均太陽時
29
+ ['[寛政丁亥暦]1827.01.01', '@CR', "1827-01-01^JapaneseTwin::寛政丁亥暦"], # 京都平均太陽時
30
+ ['[天保暦]1844.01.01', '@CR', "1844-01-01^JapaneseTwin::天保暦" ], # 京都真太陽時
31
+ ['[旧々暦=,*JSO=]1872.12.03','@CR', "1872-12-03^JapaneseTwin::旧々暦" ], # 東京平均太陽時
32
+ ['[旧暦,*JS=]1887.11.18', '@CR', "1887-11-18^JapaneseTwin::旧暦" ] # 日本標準時
33
+ ]]
34
+
35
+ # Japanese Solar Calendar Series for Japanese Note
36
+ JapaneseSolar = [self, [
37
+ 'locale:[=ja:, en=en:]',
38
+ 'area:[日本の節月=, *JapaneseSolar=]',
39
+ ['[平朔儀鳳暦=]-661.01.01', '@F', "-661-01-01^JapaneseTwin::平朔儀鳳暦(節月)"], # 年の始めに遡って開始(実際は12.22)
40
+ ['[元嘉暦]454.01.12', '@CR', "454-01-12^ChineseTwin::元嘉暦(節月)"],
41
+ ['[儀鳳暦]696.12.27', '@CR', "696-12-27^ChineseTwin::麟徳暦(節月)"],
42
+ ['[大衍暦]764.01.06', '@CR', "764-01-06^ChineseTwin::大衍暦(節月)"],
43
+ ['[五紀暦]857.12.19', '@CR', "857-12-19^ChineseTwin::五紀暦(節月)"],
44
+ ['[宣明暦]862.01.03', '@CR', "862-01-03^ChineseTwin::宣明暦(節月)"],
45
+ ['[貞享乙丑暦=]1685.01.01', '@CR', "1685-01-01^JapaneseTwin::貞享乙丑暦(節月)"],
46
+ ['[貞享暦]1687.01.08', '@CR', "1687-01-08^JapaneseTwin::貞享暦(節月)" ],
47
+ ['[宝暦癸酉暦=]1752.12.30', '@CR', "1752-12-30^JapaneseTwin::宝暦癸酉暦(節月)"],
48
+ ['[宝暦甲戌暦=]1753.12.19', '@CR', "1753-12-19^JapaneseTwin::宝暦甲戌暦(節月)"],
49
+ ['[宝暦暦]1755.01.07', '@CR', "1755-01-07^JapaneseTwin::宝暦暦(節月)" ],
50
+ ['[修正宝暦暦=]1771.01.11', '@CR', "1771-01-11^JapaneseTwin::修正宝暦暦(節月)"],
51
+ ['[寛政暦]1798.01.12', '@CR', "1798-01-12^JapaneseTwin::寛政暦(節月)" ],
52
+ ['[寛政丁亥暦]1826.12.22', '@CR', "1826-12-22^JapaneseTwin::寛政丁亥暦(節月)"],
53
+ ['[天保暦]1844.01.14', '@CR', "1844-01-14^JapaneseTwin::天保暦(節月)" ], # 京都真太陽時
54
+ ['[旧々暦=,*JSO=]1872.11.26','@CR', "1872-11-26^JapaneseTwin::旧々暦(節月)" ], # 東京平均太陽時
55
+ ['[旧暦,*JS=]1887.11.26', '@CR', "1887-11-26^JapaneseTwin::旧暦(節月)" ] # 日本標準時
56
+ ]]
57
+ end
58
+
59
+ module CalendarTypes
60
+
61
+ _japanese_common = {
62
+ 'year_delta' => 1, # 冬至年の変化率 / (10^(-6)日/年)
63
+ 'year_span' => 1, # 冬至年の改訂周期 / 年
64
+ 'lunation_length' => 29.530590, # 朔実(朔望月)
65
+ 'lunar_mean_motion' => 13.36875, # 月平行(恒星天に対する月の平均運動 / 日)
66
+ 'anomalistic_month_length' => 27.5546, # 転終(近点月)
67
+ 'anomaly_method' => 'c', # (経朔-定朔)の計算方法(a:差分, b:微分, c:幾何学的補正)
68
+ 'anomaly_precision' => 1e-5, # c 方式 での収束判定誤差 / 日
69
+ 'lunar_unit' => 0.1, # 太陰遅速計算用招差法定数の時間の単位(限)
70
+ 'solar_weight' => 1, # (経朔-定朔)の計算で用いる実行差での太陽盈縮の重み(0:非考慮,1:考慮)
71
+ 'm' => [ # 太陰遅速計算用招差法定数
72
+ [ 0 ... 72.65342, 0, [-0, -1173_1000, +3_7000, +400]],
73
+ [ 72.65342...137.773, 137.773, [-0, -1324_0000, +5_2000, +500]],
74
+ [137.773 ...202.89258, 137.773, [+0, +1324_0000, -5_2000, -500]],
75
+ [202.89258.. 275.546, 275.546, [+0, +1173_1000, -3_7000, -400]]
76
+ ],
77
+ 's' => [ # 太陽盈縮計算用招差法定数
78
+ [ 0 ... 89.25392, 0, [0, +436_0000, -2_0000, -34]],
79
+ [ 89.25392 ...182.620848, 182.620848, [0, +411_9800, -1_7640, -31]],
80
+ [182.620848...275.987776, 182.620848, [0, -411_9800, +1_7640, +31]],
81
+ [275.987776.. 365.241696, 365.241696, [0, -436_0000, +2_0000, +34]]
82
+ ]
83
+ }
84
+
85
+ JapaneseTwin = [{}, When::BasicTypes::M17n, ChineseSolar.twin('JapaneseTwin', [
86
+ "locale:[=ja:, en=en:, alias]",
87
+ "area:[日本,Japan]",
88
+
89
+ [ChineseLuniSolar,
90
+ 'name:[平朔儀鳳暦=]',
91
+ 'formula:MeanLunation?year_length=122357/335&lunation_length=39571/1340&day_epoch=-96608689'
92
+ ],
93
+
94
+ [ChineseLuniSolar,
95
+ 'name:[貞享乙丑暦=]',
96
+ {'formula'=>['12S', '1L'].map {|f| [
97
+ Ephemeris::ChineseTrueLunation, _japanese_common.merge({
98
+ 'formula' => f,
99
+ 'day_epoch' => 2336111 + 7.675, # 暦元天正冬至のユリウス日
100
+ 'year_epoch' => 1684, # 暦元の西暦年
101
+ 'year_length' => 365.241696, # 暦元の冬至年 / 日
102
+ 'anomalistic_year_shift' => 6.445, # 暦應(冬至から近日点通過までの日数)
103
+ 'lunation_shift' => 2.779 - 0.015, # 閏應(暦元前経朔から暦元天正冬至までの日数)
104
+ 'anomalistic_month_shift' => 22.72 - 0.015 # 転應(暦元前近/遠地点通過から暦元天正冬至までの日数)
105
+ })]
106
+ }
107
+ }
108
+ ],
109
+
110
+ [ChineseLuniSolar,
111
+ 'name:[貞享暦]',
112
+ {'formula'=>['12S', '1L'].map {|f| [
113
+ Ephemeris::ChineseTrueLunation, _japanese_common.merge({
114
+ 'formula' => f,
115
+ 'day_epoch' => 2336111 + 7.69 , # 暦元天正冬至のユリウス日
116
+ 'year_epoch' => 1684, # 暦元の西暦年
117
+ 'year_length' => 365.241696, # 暦元の冬至年 / 日
118
+ 'anomalistic_year_shift' => 6.445, # 暦應(冬至から近日点通過までの日数)
119
+ 'lunation_shift' => 2.779, # 閏應(暦元前経朔から暦元天正冬至までの日数)
120
+ 'anomalistic_month_shift' => 22.72 # 転應(暦元前近/遠地点通過から暦元天正冬至までの日数)
121
+ })]
122
+ }
123
+ }
124
+ ],
125
+
126
+ [ChineseLuniSolar,
127
+ 'name:[宝暦癸酉暦=]',
128
+ {'formula'=>['12S', '1L'].map {|f| [
129
+ Ephemeris::ChineseTrueLunation, _japanese_common.merge({
130
+ 'formula' => f,
131
+ 'day_epoch' => 2336111 + 7.9038,# 暦元天正冬至のユリウス日
132
+ 'year_epoch' => 1684, # 暦元の西暦年
133
+ 'year_length' => 365.241696, # 暦元の冬至年 / 日
134
+ 'anomalistic_year_shift' => 6.445, # 暦應(冬至から近日点通過までの日数)
135
+ 'lunation_shift' => 2.779 + 0.2138, # 閏應(暦元前経朔から暦元天正冬至までの日数)
136
+ 'anomalistic_month_shift' => 22.72 + 0.2138 # 転應(暦元前近/遠地点通過から暦元天正冬至までの日数)
137
+ })]
138
+ }
139
+ }
140
+ ],
141
+
142
+ [ChineseLuniSolar,
143
+ 'name:[宝暦甲戌暦=]',
144
+ {'formula'=>['12S', '1L'].map {|f| [
145
+ Ephemeris::ChineseTrueLunation, _japanese_common.merge({
146
+ 'formula' => f,
147
+ 'day_epoch' => 2336111 + 7.6223,# 暦元天正冬至のユリウス日
148
+ 'year_epoch' => 1684, # 暦元の西暦年
149
+ 'year_length' => 365.241696, # 暦元の冬至年 / 日
150
+ 'anomalistic_year_shift' => 6.445, # 暦應(冬至から近日点通過までの日数)
151
+ 'lunation_shift' => 2.779 - 0.0677, # 閏應(暦元前経朔から暦元天正冬至までの日数)
152
+ 'anomalistic_month_shift' => 22.72 - 0.0677 # 転應(暦元前近/遠地点通過から暦元天正冬至までの日数)
153
+ })]
154
+ }
155
+ }
156
+ ],
157
+
158
+ [ChineseLuniSolar,
159
+ 'name:[宝暦暦]',
160
+ {'formula'=>['12S', '1L'].map {|f| [
161
+ Ephemeris::ChineseTrueLunation, _japanese_common.merge({
162
+ 'formula' => f,
163
+ 'day_epoch' => 2361671 + 14.536, # 暦元天正冬至のユリウス日
164
+ 'year_epoch' => 1754, # 暦元の西暦年
165
+ 'year_length' => 365.241556, # 暦元の冬至年 / 日
166
+ 'anomalistic_year_shift' => 6.455, # 暦應(冬至から近日点通過までの日数)
167
+ 'lunation_shift' => 25.654, # 閏應(暦元前経朔から暦元天正冬至までの日数)
168
+ 'anomalistic_month_shift' => 18.88, # 転應(暦元前近/遠地点通過から暦元天正冬至までの日数)
169
+ 's' => ChineseSolar.change_unit(365.241556 / 365.241696, _japanese_common['s'])
170
+ })]
171
+ }
172
+ }
173
+ ],
174
+
175
+ [ChineseLuniSolar,
176
+ 'name:[修正宝暦暦=]',
177
+ {'formula'=>['12S', '1L'].map {|f| [
178
+ Ephemeris::ChineseTrueLunation, _japanese_common.merge({
179
+ 'formula' => f,
180
+ 'day_epoch' => 2361671 + 14.681, # 暦元天正冬至のユリウス日
181
+ 'year_epoch' => 1754, # 暦元の西暦年
182
+ 'year_length' => 365.241626, # 暦元の冬至年 / 日
183
+ 'anomalistic_year_shift' => 7.42, # 暦應(冬至から近日点通過までの日数)
184
+ 'lunation_shift' => 25.82, # 閏應(暦元前経朔から暦元天正冬至までの日数)
185
+ 'anomalistic_month_shift' => 19.307, # 転應(暦元前近/遠地点通過から暦元天正冬至までの日数)
186
+ 's' => ChineseSolar.change_unit(365.241626 / 365.241696, _japanese_common['s'])
187
+ })]
188
+ }
189
+ }
190
+ ],
191
+
192
+ [ChineseLuniSolar,
193
+ 'name:[寛政暦]',
194
+ 'time_basis:+00,+09:03:01', # 寛政9天正冬至.107112
195
+ {'formula'=>['ChineseTrueLunation?day_epoch=2377391.107112&year_epoch=1797&year_length=365.242347071&year_delta=-0.217685&year_span=1000',
196
+ 'Formula']}
197
+ ],
198
+
199
+ [ChineseLuniSolar,
200
+ 'name:[寛政丁亥暦]',
201
+ 'time_basis:+00,+09:03:01', # 寛政9天正冬至.107112
202
+ {'formula'=>['ChineseTrueLunation?day_epoch=2377391.107112&year_epoch=1797&year_length=365.242347071&year_delta=-0.217685&year_span=10',
203
+ 'Formula']}
204
+ ],
205
+
206
+ [ChineseLuniSolar,
207
+ 'name:[天保暦]',
208
+ 'time_basis:LAT?long=135.4520E&lat=35.0117N',
209
+ 'intercalary_span:3'
210
+ ],
211
+
212
+ [ChineseLuniSolar,
213
+ 'name:[旧々暦=]',
214
+ 'time_basis:+09:18:59',
215
+ 'intercalary_span:3'
216
+ ],
217
+
218
+ [ChineseLuniSolar,
219
+ 'name:[旧暦]',
220
+ 'time_basis:+09:00',
221
+ 'intercalary_span:3'
222
+ ]
223
+ ])]
224
+ end
225
+ end
@@ -0,0 +1,112 @@
1
+ # -*- coding: utf-8 -*-
2
+ =begin
3
+ Copyright (C) 2014 Takashi SUGA
4
+
5
+ You may use and/or modify this file according to the license described in the LICENSE.txt file included in this archive.
6
+ =end
7
+
8
+ class When::CalendarNote
9
+
10
+ #
11
+ # 標準の暦注 + 六曜
12
+ #
13
+ CommonWithRokuyo = [['_m:Calendar::Month'], ['Common::Week', '_n:RokuyoWeek/Notes::day::Rokuyo']]
14
+
15
+ #
16
+ # 六曜
17
+ #
18
+ class RokuyoWeek < Week
19
+
20
+ #
21
+ # 暦注要素の定義
22
+ #
23
+ Notes = [When::BasicTypes::M17n, [
24
+ "locale:[=en:, ja=ja:, alias]",
25
+ "names:[Rokuyo]",
26
+
27
+ # 日の暦注 ----------------------------
28
+ [When::BasicTypes::M17n,
29
+ "names:[day]",
30
+ [When::BasicTypes::M17n,
31
+ "names:[Rokuyo, 六曜]",
32
+ [DayOfWeek, "label:[Taian=, *大安]", {'delta'=>6}],
33
+ [DayOfWeek, "label:[Shakko=, *赤口]", {'delta'=>6}],
34
+ [DayOfWeek, "label:[Sensho=, *先勝]", {'delta'=>6}],
35
+ [DayOfWeek, "label:[Tomobiki=, *友引]", {'delta'=>6}],
36
+ [DayOfWeek, "label:[Sembu=, *先負]", {'delta'=>6}],
37
+ [DayOfWeek, "label:[Butsumetsu=, *仏滅]", {'delta'=>6}]
38
+ ]
39
+ ]
40
+ ]]
41
+
42
+ #
43
+ # この日は何曜?
44
+ #
45
+ # @param [When::TM::TemporalPosition] date
46
+ # @param [When::TM::CalDate] base (not used)
47
+ #
48
+ # @return [Hash<:value=>When::CalendarNote::Week::DayOfWeek, :position=>Array<Integer>>]
49
+ #
50
+ def rokuyo(date, base=nil)
51
+ date = _to_date_for_note(date)
52
+ y, m, d = date.cal_date
53
+ index = rokuyo_index(m,d)
54
+ {:value=>@days_of_week[index], :position=>[index, 6]}
55
+ end
56
+ alias :week :rokuyo
57
+
58
+ # @private
59
+ def rokuyo_value(m,d)
60
+ @days_of_week[rokuyo_index(m,d)]
61
+ end
62
+
63
+ # @private
64
+ def rokuyo_index(m,d)
65
+ (m*1 + d) % 6
66
+ end
67
+
68
+ # @private
69
+ def taian(date, base=nil)
70
+ count = 0
71
+ d0 = d1 = _to_date_for_note(date)
72
+ r0 = r1 = nil
73
+ loop do
74
+ y,m,d = d1.cal_date
75
+ r1 = rokuyo_index(m,d)
76
+ break if r1 == 0
77
+ if r0 && r1 > r0
78
+ r1 = r0
79
+ count -= 1
80
+ break
81
+ end
82
+ d0 = d1
83
+ r0 = r1
84
+ d1 = d0 - When::P1D
85
+ count += 1
86
+ end
87
+ date -= count if count > 0
88
+ date.events = [@days_of_week[r1]]
89
+ date
90
+ end
91
+
92
+ #
93
+ # 暦日を太陰太陽暦日に変換
94
+ #
95
+ # @private
96
+ def _to_date_for_note(date)
97
+ return date if date.frame.kind_of?(When::CalendarTypes::ChineseLuniSolar)
98
+ return When::Japanese ^ date if date.most_significant_coordinate >= 1873
99
+ return Japanese._to_japanese_date(date)
100
+ end
101
+
102
+ private
103
+
104
+ # オブジェクトの正規化
105
+ # @private
106
+ def _normalize(args=[], options={})
107
+ @days_of_week ||= When.CalendarNote("RokuyoWeek/Notes::day::Rokuyo")
108
+ @event ||= 'taian'
109
+ super
110
+ end
111
+ end
112
+ end