Class: When::CalendarTypes::CalendarNote::JapaneseNote::SolarTerms

Inherits:
SolarTerms show all
Defined in:
lib/when_exe/region/japanese_notes.rb

Overview

太陽黄経による暦注

Constant Summary collapse

Notes12 =
%w(正月 二月 三月 四月 五月 六月 七月 八月 九月 十月 十一月 十二月)
Notes10 =
[
%w(初伏 初伏),
%w(仲伏 中伏),
%w(後伏 末伏)
Notes60_A =
[
  #  +0      
  '侯小過外', # 315 : 正月
  '侯需外',   # 345 : 二月
  '侯豫外',   #  15 : 三月
  '侯旅外',   #  45 : 四月
  '侯大有外', #  75 : 五月
  '侯鼎外',   # 105 : 六月
  '侯恆外',   # 135 : 七月
  '侯巽外',   # 165 : 八月
  '侯歸妹外', # 195 : 九月
  '侯艮外',   # 225 : 十月
  '侯未濟外', # 255 : 十一月
  '侯屯外'    # 285 : 十二月
]
Notes60_B =
[
  #  +3          +9       +15       +21       +27
  '大夫蒙',   '卿益',   '公漸',   '辟泰',   '侯需内',   # 315 : 正月
  '大夫随',   '卿晋',   '公解',   '辟大壯', '侯豫内',   # 345 : 二月
  '大夫訟',   '卿蠱',   '公革',   '辟夬',   '侯旅内',   #  15 : 三月
  '大夫師',   '卿比',   '公小畜', '辟乾',   '侯大有内', #  45 : 四月
  '大夫家人', '卿井',   '公咸',   '辟姤',   '侯鼎内',   #  75 : 五月
  '大夫豊',   '卿渙',   '公履',   '辟遯',   '侯恆内',   # 105 : 六月
  '大夫節',   '卿同人', '公損',   '辟否',   '侯巽内',   # 135 : 七月
  '大夫萃',   '卿大畜', '公賁',   '辟観',   '侯歸妹内', # 165 : 八月
  '大夫無妄', '卿明夷', '公困',   '辟剥',   '侯艮内',   # 195 : 九月
  '大夫既濟', '卿噬嗑', '公大過', '辟坤',   '侯未濟内', # 225 : 十月
  '大不蹇',   '卿頤',   '公中孚', '辟復',   '侯屯内',   # 255 : 十一月
  '大夫謙',   '卿睽',   '公升',   '辟臨',   '侯小過内'  # 285 : 十二月
]
Notes72 =
[
      # 儀鳳暦         宣明暦(中国)       宣明暦            貞享暦   宝暦暦・寛政暦 略本暦
      # 315 : 正月
%w(雞始乳       東風解凍          東風解凍          東風解凍     東風解凍   東風解凍),
%w(東風解凍     蟄始振            蟄虫始振          梅花乃芳     黄鶯睍睆   黄鶯睍睆),
%w(蟄蟲始振     魚上氷            魚上氷            魚上氷       魚上氷     魚上氷),
%w(魚上冰       獺祭魚            獺祭魚            土脈潤起     土脈潤起   土脉潤起),
%w(獺祭魚       鴻雁来            鴻雁来            霞彩碧空     霞始靆     霞始靆),
%w(鴻雁來       草木萌動          草木萌動          草木萌動     草木萌動   草木萌動),

      # 345 : 二月
%w(始雨水       桃始華            桃始華            蟄虫啓戸     蟄虫啓戸   蟄虫啓戸),
%w(桃始花       倉庚鳴            倉庚鳴            寒雨間熟     桃始笑     桃始笑),
%w(倉庚鳴       鷹化爲鳩          鷹化爲鳩          菜虫化蝶     菜虫化蝶   菜虫化蝶),
%w(鷹化爲鳩     玄鳥至            玄鳥至            雀始巣       雀始巣     雀始巣),
%w(玄鳥至       雷乃發聲          雷乃發聲          雷乃発声     桜始開     桜始開),
%w(雷始發聲     始電              始電              桜始開桃始笑 雷乃発声   雷乃発声),

      #  15 : 三月
%w(始雷         桐始華            桐始華            玄鳥至       玄鳥至     玄鳥至),
%w(蟄蟲咸動     田鼠化爲鴑        田鼠化爲鴑        鴻雁北       鴻雁北     鴻雁北),
%w(蟄蟲啓戸     虹始見            虹始見            虹始見       虹始見     虹始見),
%w(桐始華       萍始生            萍始生            葭始生       葭始生     葭始生),
%w(田鼠化爲鴑   鳴鳩拂其羽        鳴鳩拂其羽        牡丹華       霜止出苗   霜止出苗),
%w(虹始見       戴勝降于桑        戴勝降于桑        霜止出苗     牡丹華     牡丹華),

      #  45 : 四月
%w(萍始生       螻蟈鳴            螻蟈鳴            鵑始鳴       鼃始鳴     鼃始鳴),
%w(戴勝降于桑   蚯蚓出            蚯蚓出            蚯蚓出       蚯蚓出     蚯蚓出),
%w(螻蟈鳴       王瓜生            王瓜生            竹笋生       竹笋生     竹笋生),
%w(蚯蚓出       苦菜秀            苦菜秀            蚕起食桑     蚕起食桑   蚕起食桑),
%w(王瓜生       靡草死            靡草死            紅花栄       紅花栄     紅花栄),
%w(苦菜秀       小暑至            小暑至            麦秋至       麦秋至     麦秋至),
   
      #  75 : 五月
%w(靡草死       螳蜋生            螳蜋生            螳螂生       螳螂生     螳螂生),
%w(小暑至       鵙始鳴            鵙始鳴            腐草為螢     腐草為螢   腐草為螢),
%w(螳螂生       反舌無聲          反舌無聲          梅始黄       梅子黄     梅子黄),
%w(鵙始鳴       鹿角解            鹿角解            乃東枯       乃東枯     乃東枯),
%w(反舌無聲     蜩始鳴            蜩始鳴            分龍雨       菖蒲華     菖蒲華),
%w(鹿角解       半夏生            半夏生            半夏生       半夏生     半夏生),

      # 105 : 六月
%w(蟬始鳴       温風至            温風至            温風至       温風至     温風至),
%w(半夏生       蟋蟀居壁          蟋蟀居壁          蓮始華       蓮始華     蓮始開),
%w(木槿榮       鷹乃學習          鷹乃學習          鷹乃学習     鷹乃学習   鷹乃学習),
%w(温風至       腐草爲螢          腐草爲螢          桐始結花     桐始結花   桐始結花),
%w(蟋蟀居壁     土潤溽暑          土潤溽暑          土潤溽暑     土潤溽暑   土潤溽暑),
%w(鷹乃學習     大雨時行          大雨時行          大雨時行     大雨時行   大雨時行),

      # 135 : 七月
%w(腐草爲螢     涼風至            涼風至            涼風至       涼風至     涼風至),
%w(土潤溽暑     白露降            白露降            山沢浮雲     寒蝉鳴     寒蝉鳴),
%w(涼風至       寒蟬鳴            寒蟬鳴            霧色已成     蒙霧升降   蒙霧升降),
%w(白露降       鷹乃祭鳥          鷹乃祭鳥          寒蝉鳴       綿柎開     綿柎開),
%w(寒蟬鳴       天地始肅          天地始肅          天地始粛     天地始粛   天地始粛),
%w(鷹祭鳥       禾乃登            禾乃登            禾乃登       禾乃登     禾乃登),

      # 165 : 八月
%w(天地始肅     鴻雁来            鴻雁来            草露白       草露白     草露白),
%w(暴風至       玄鳥歸            玄鳥歸            鶺鴒鳴       鶺鴒鳴     鶺鴒鳴),
%w(鴻雁來       群鳥養羞          群鳥養羞          玄鳥去       玄鳥去     玄鳥去),
%w(玄鳥歸       雷乃收聲          雷乃收聲          鴻雁来       雷乃収声   雷乃収声),
%w(羣鳥養羞     蟄蟲坏戸          蟄蟲坏戸          蟄虫坏戸     蟄虫坏戸   蟄虫坏戸),
%w(雷始收聲     水始涸            水始涸            水始涸       水始涸     水始涸),

      # 195 : 九月
%w(蟄蟲坏戸     鴻雁來賓          鴻雁來賓          棗栗零       鴻雁来     鴻雁来),
%w(陰氣方盛     雀入大水爲蛤      雀入大水爲蛤      蟋蟀在戸     菊花開     菊花開),
%w(陽氣始衰     菊有黄花          菊有黄花          菊花開       蟋蟀在戸   蟋蟀在戸),
%w(水始涸       豺乃祭獸          豺乃祭獸          霜始降       霜始降     霜始降),
%w(鴻雁來賓     草木黄落          草木黄落          蔦楓紅葉     霎時施     霎時施),
%w(雀入水爲蛤   蟄蟲咸俯          蟄蟲咸俯          鶯雛鳴       楓蔦黄     楓蔦黄),

      # 225 : 十月
%w(菊有黄花     水始冰            水始冰            山茶始開     山茶始開   山茶始開),
%w(豺祭獣       地始凍            地始凍            地始凍       地始凍     地始凍),
%w(水始冰       野雞入大水爲蜃    野雞入大水爲蜃    霎乃降       金盞香     金盞香),
%w(地始凍       虹藏不見          虹藏不見          虹蔵不見     虹蔵不見   虹蔵不見),
%w(野雞入水爲蜃 天氣上騰地氣下降  天氣上騰地氣下降  樹葉咸落     朔風払葉   朔風払葉),
%w(虹藏不見     閉塞而成冬        閉塞而成冬        橘始黄       橘始黄     橘始黄),

      # 255 : 十一月
%w(冰益壯       鶡鳥不鳴          鶡鳥不鳴          閉塞成冬     閉塞成冬   閉塞成冬),
%w(地始坼       虎始交            虎始交            熊蟄穴       熊蟄穴     熊蟄穴),
%w(鶡鳥不鳴     茘挺生            茘挺生            水仙開       鱖魚群     鱖魚群),
%w(虎始交       蚯蚓結            蚯蚓結            乃東生       乃東生     乃東生),
%w(芒始生       麋角解            麋角解            麋角解       麋角解     麋角解),
%w(茘挺生       水泉動            水泉動            雪下出麦     雪下出麦   雪下出麦),

      # 285 : 十二月
%w(蚯蚓結       雁北郷            雁北郷            芹乃栄       芹乃栄     芹乃栄),
%w(麋角解       鵲始巣            鵲始巣            風気乃行     水泉動     水泉動),
%w(水泉動       野雞始鴝          野雞始鴝          雉始雊       雉始雊     雉始雊),
%w(雁北郷       雞始乳            雞始乳            款冬華       款冬華     款冬華),
%w(鵲始巣       鷙鳥厲疾          鷙鳥厲疾          水沢腹堅     水沢腹堅   水沢腹堅),
%w(雉始雊       水澤腹堅          水澤腹堅          鶏始乳       鶏始乳     鶏始乳)
Patch =

計算結果の修正

{
  2039054 => [149.0, 1], # 貞観12(0870).07.17 [149.0, 0] 没
  2039055 => [150.0, 0], # 貞観12(0870).07.18 [150.0, 1] 処暑

  2107233 => [ 29.0, 1], # 天喜05(1057).03.10 [ 29.0, 0] 没
  2107234 => [ 30.0, 0], # 天喜05(1057).03.11 [ 30.0, 1] 穀雨

  2160437 => [269.0, 0], # 建仁02(1202).10=29 [270.0, 1] 冬至
  2160438 => [270.0, 1], # 建仁02(1202).11.01 [271.0, 1]
  2160439 => [271.0, 1], # 建仁02(1202).11.02 [272.0, 1]
  2160440 => [272.0, 1], # 建仁02(1202).11.03 [272.0, 0] 没

  2175412 => [269.0, 1], # 寛元01(1243).11.03 [269.0, 0] 没
  2175413 => [270.0, 0], # 寛元01(1243).11.04 [270.0, 1] 冬至

  2189200 => [179.0, 0], # 弘安04(1281).07=30 [180.0, 1] 秋分
  2189201 => [180.0, 1], # 弘安04(1281).08.01 [181.0, 1]
  2189202 => [181.0, 1], # 弘安04(1281).08.02 [181.0, 0] 没

  2243577 => [136.0, 0], # 永享02(1430).07.11 [136.0, 1] (立秋の翌日)
  2243578 => [136.0, 1], # 永享02(1430).07.12 [137.0, 1]
  2243579 => [137.0, 1], # 永享02(1430).07.13 [138.0, 1]
  2243580 => [138.0, 1], # 永享02(1430).07.14 [139.0, 1]
  2243581 => [139.0, 1], # 永享02(1430).07.15 [140.0, 1]
  2243582 => [140.0, 1], # 永享02(1430).07.16 [141.0, 1]
  2243583 => [141.0, 1], # 永享02(1430).07.17 [142.0, 1]
  2243584 => [142.0, 1], # 永享02(1430).07.18 [143.0, 1]
  2243585 => [143.0, 1], # 永享02(1430).07.19 [144.0, 1]
  2243586 => [144.0, 1], # 永享02(1430).07.20 [145.0, 1]
  2243587 => [145.0, 1], # 永享02(1430).07.21 [146.0, 1]
  2243588 => [146.0, 1], # 永享02(1430).07.22 [147.0, 1]
  2243589 => [147.0, 1], # 永享02(1430).07.23 [148.0, 1]
  2243590 => [148.0, 1], # 永享02(1430).07.24 [149.0, 1]
  2243591 => [149.0, 1], # 永享02(1430).07.25 [149.0, 0] 没 (処暑の前日)

  2311770 => [ 29.0, 1], # 元和03(1617).03.18 [ 29.0, 0] 没
  2311771 => [ 30.0, 0]  # 元和03(1617).03.19 [ 30.0, 1] 穀雨
}

Constants inherited from When::CalendarTypes::CalendarNote

BahaiNotes, ChineseNotes, DefaultNotes, When::CalendarTypes::CalendarNote::JavaneseNotes, When::CalendarTypes::CalendarNote::JulianDayNotes, MayanNotes, TibetanNotes, YiNotes

Constants included from Parts::Resource

Parts::Resource::LabelProperty

Class Attribute Summary collapse

Attributes inherited from LuniSolarPositions

#delta, #den, #formula, #margin, #num

Attributes inherited from When::CalendarTypes::CalendarNote

#event

Attributes inherited from TM::ReferenceSystem

#domain_of_validity, #position

Attributes inherited from BasicTypes::Object

#label

Attributes included from Parts::Resource

#_pool, #child, #keys, #locale, #namespace

Class Method Summary collapse

Methods inherited from LuniSolarPositions

#position, #term, #term_delta

Methods inherited from When::CalendarTypes::CalendarNote

#copy, #day, #duration, #enum_for, #include?, #month, #note?, #notes, #year

Methods inherited from TM::ReferenceSystem

#domain, #name

Methods included from Parts::Resource

#[], #^, _decode, _encode, _extract_prefix, _instance, _parse, _path_with_prefix, _replace_tags, _setup_, #each, #enum_for, #hierarchy, #include?, #included?, #iri, #leaf?, #m17n, #map, #next, #parent, #prev, #registered?

Methods included from Parts::Resource::Pool

#[], #[]=, #_pool, #_setup_, #pool_keys

Methods included from Parts::Resource::Synchronize

#synchronize

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class When::Parts::Resource

Class Attribute Details

.patch=(value) ⇒ Object (writeonly)

テスト用の属性



1136
1137
1138
# File 'lib/when_exe/region/japanese_notes.rb', line 1136

def patch=(value)
  @patch = value
end

Class Method Details

._day_notes(notes, dates, conditions = {}) ⇒ Object

日の暦注



1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
# File 'lib/when_exe/region/japanese_notes.rb', line 1141

def _day_notes(notes, dates, conditions={})
  date  = When.when?(dates.o_date.to_cal_date.to_s,
            {:frame=>dates.o_date.frame,
             :clock=>dates.s_date.frame.time_basis})
  patch = (@patch || Patch)[date.to_i] unless dates.o_date.frame.respond_to?(:twin) &&
                                              dates.o_date.frame.twin
  longitude, motsu = patch ? patch : dates.cal4note.s_terms.position(date)

  # 三伏 - 庚
  #
  # 初 : 夏至から 20..29
  # 仲 : 夏至から 30..39
  # 後 : 立秋から  0..9 
  if !notes['三伏'] && notes[''].remainder == 6 # 庚
    index = dates.range >= 11 ? 1 : 0
    if 109 <= longitude && longitude <= 129      # 夏至から
      term = dates.cal4note.s_terms.term(date, [-270,360])
      diff = dates.s_date.to_i - term.to_i
      notes['三伏'] = Notes10[0][index] if 20 <= diff && diff <= 29
      notes['三伏'] = Notes10[1][index] if 30 <= diff && diff <= 39
    elsif longitude == 135                     # 立秋
      notes['三伏'] = Notes10[2][index]
    elsif 136 <= longitude && longitude <= 144 # 立秋から
      term = dates.cal4note.s_terms.term(date, [-225,360])
      diff = dates.s_date.to_i - term.to_i
      notes['三伏'] = Notes10[2][index] if 0 < diff && diff <= 9
    end
  end

  # 社 - 戊
  #
  # 春秋分から -5..4
  if !notes[''] && notes[''].remainder == 4 # 戊
    if (longitude + 5) % 180 < 10 # 春秋分の近傍
      term = dates.cal4note.s_terms.term(date - When.Duration('P5D'), [0,180])
      diff = dates.s_date.to_i - term.to_i
      notes[''] = '' if -5 <= diff && diff <= 4
    end
  end

  # 臘 - 辰
  #
  # 大寒から -6..5
  if !notes[''] && notes[''].remainder == 4 # 辰
    if (longitude - 339) % 360 < 12 # 大寒の近傍
      term = dates.cal4note.s_terms.term(date - When.Duration('P6D'), [345,360])
      diff = dates.s_date.to_i - term.to_i
      notes[''] = '' if -6 <= diff && diff <= 5
    end
  end

  # 土用事
  unless notes['土用事']
    _longitude, _motsu = dates.cal4note.doyo ? dates.cal4note.s_terms.position(date, -dates.cal4note.doyo) :
                                               [longitude, motsu]
    if _motsu != 0 && _longitude % 90 == 27
      notes['土用事'] =
        case dates.range
        when 0     ; '土用'   # 元嘉暦以前
        when 1     ; '土王'   # 麟徳暦
        when 2..10 ; '土用事' # 大衍暦~宣明暦
        else       ; '土用入' # 貞享暦以降
        end
    end
  end

  # 入梅 - 壬
  #
  # 貞享2(1685)~ 芒種から 1..10 日の壬の日
  # 元文5(1740)~ 芒種から 0..9  日の壬の日
  # 明治9(1876)~ 太陽黄経80度
  unless notes['入梅']
    if dates.year >= 1876
      notes['入梅'] = '入梅' if longitude == 80 && motsu == 1
    elsif notes[''].remainder == 8 # 壬
      if (longitude - 75) % 360 <= 10 # 芒種の近傍
        term  = dates.cal4note.s_terms.term(date - When.Duration('P11D'), [75,360])
        diff  = dates.s_date.to_i - term.to_i
        diff += 1 if dates.year >= 1740
        notes['入梅'] = '入梅' if dates.range >= 11 && 1 <= diff && diff <= 10
      end
    end
  end

  # 立春を起算日とする雑節
  #
  unless notes['節分'] && notes['八十八夜'] && notes['二百十日'] && notes['二百廿日']
    term = dates.cal4note.s_terms.term(date + When.Duration('P3D'), [-45,360])
    case dates.s_date.to_i - term.to_i
    when  -1 ; notes['節分']     ||= '節分'
    when  87 ; notes['八十八夜'] ||= '八十八夜'
    when 209 ; notes['二百十日'] ||= '二百十日'
    when 219 ; notes['二百廿日'] ||= '二百廿日'
    end
  end

  # 日食
  notes['日食']       = nil # 計算できないので、偽としておく

  # 没
  if motsu == 0
    notes[''] = '' if dates.range < 11
    return notes unless patch
  end

  # 廿四節気
  div, mod = longitude.divmod(15)
  if mod == 0
    notes['廿四節気'] = (div - 21) % 24
    div, mod = notes['廿四節気'].divmod(2)
    notes['節中']   ||= Notes12[div] + %w( )[mod]
  end

  # 七十二候
  div, mod = longitude.divmod(5)
  notes['七十二候'] ||= mod == 0  ? Notes72[(div - 63) % 72][dates.index_s]  : nil

  # 往亡
  month    = dates.s_date.cal_date[1] - 1
  div, mod = month.divmod(3)
  notes['往亡']     ||= ((div+7)*(mod+1) + month * 30 + 314 - longitude) % 360 == 0 ? '往亡'  : nil

  # 伏龍
  notes['伏龍']     ||= {
    315 => '庭内去堂',  15 => '門内百日', 115 => '東垣六十日',
    175 => '四隅百日', 275 => '竈内四十日'
  }[longitude]

  # 六十卦
  div, mod = longitude.divmod(30)
  notes['六十卦']   ||= mod == 15 ? Notes60_A[(div - 10) % 12] : nil
  div, mod = longitude.divmod(6)
  notes['六十卦']   ||= mod == 0  ? Notes60_B[(div - 53) % 60] : nil

  # 彼岸
  unless notes['彼岸']
    if dates.range < 11
      notes['彼岸'] = '彼岸' if longitude % 180 == 2 # 宣明暦以前(没を除いて3日後)
    else
      term = dates.cal4note.s_terms.term(date - When.Duration('P7D'), [0,180]) # 近傍の春秋分
      case dates.s_date.to_i - term.to_i
      when  2 ; notes['彼岸'] = '彼岸' if dates.range == 11 # 貞享暦(没を含めて3日後)
      when -5 ; notes['彼岸'] = '彼岸' if longitude >  180 && (1755...1844).include?(dates.year) # 宝暦暦・寛政暦(春-6日前))
      when -1 ; notes['彼岸'] = '彼岸' if longitude <= 180 && (1755...1844).include?(dates.year) # 宝暦暦・寛政暦(秋-2日前)
      when -3 ; notes['彼岸'] = '彼岸' if dates.year >= 1844 # 天保暦以降(秋-4日前)
      end
    end
    notes['彼岸'] = nil unless notes['彼岸'] == '彼岸'
  end

  notes
end