when_exe 0.3.6 → 0.3.7

Sign up to get free protection for your applications and to get access to all the features.
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