# File AlmanacForRuby/AlmanacSolarTerm.rb, line 228 def get_setsu_immediately_before_target_day(target_day) # 節の日の格納域 setsu_date_time = AlmanacDateTime.now # 月ごとの、直前の節候補 # 1月の場合、直前の節は"小寒"(SOLAR_TERM_NUMBER=22) # または"大雪"(SOLAR_TERM_NUMBER=20) # 2月の場合、直前の節は"立春"(SOLAR_TERM_NUMBER=0) # または"小寒"(SOLAR_TERM_NUMBER=22) # 3月の場合、直前の節は"啓蟄"(SOLAR_TERM_NUMBER=2) # または"立春"(SOLAR_TERM_NUMBER=0) # 4月の場合、直前の節は"清明"(SOLAR_TERM_NUMBER=4) # または"啓蟄"(SOLAR_TERM_NUMBER=2) # 5月の場合、直前の節は"立夏"(SOLAR_TERM_NUMBER=6) # または"清明"(SOLAR_TERM_NUMBER=4) # 6月の場合、直前の節は"芒種"(SOLAR_TERM_NUMBER=8) # または"立夏"(SOLAR_TERM_NUMBER=6) # 7月の場合、直前の節は"小暑"(SOLAR_TERM_NUMBER=10) # または"芒種"(SOLAR_TERM_NUMBER=8) # 8月の場合、直前の節は"立秋"(SOLAR_TERM_NUMBER=12) # または"小暑"(SOLAR_TERM_NUMBER=10) # 9月の場合、直前の節は"白露"(SOLAR_TERM_NUMBER=14) # または"立秋"(SOLAR_TERM_NUMBER=12) # 10月の場合、直前の節は"寒露"(SOLAR_TERM_NUMBER=16) # または"白露"(SOLAR_TERM_NUMBER=14) # 11月の場合、直前の節は"立冬"(SOLAR_TERM_NUMBER=18) # または"寒露"(SOLAR_TERM_NUMBER=16) # 12月の場合、直前の節は"大雪"(SOLAR_TERM_NUMBER=20) # または"立冬"(SOLAR_TERM_NUMBER=18) target_solar_term_number = 2 * (target_day.month - 2) if 0 > target_solar_term_number target_solar_term_number = 22 end other_target_solar_term_number = 2 * (target_day.month - 3) if 0 > other_target_solar_term_number other_target_solar_term_number = 20 + 2 * (target_day.month - 1) end # 直前の節の日を求める setsu_date_time \ = get_sekki_date_time( \ target_day.year, \ target_day.offset, \ target_solar_term_number) if setsu_date_time.day > target_day.day if other_target_solar_term_number == 20 target_day.year -= 1 end setsu_date_time \ = get_sekki_date_time( \ target_day.year, \ target_day.offset, \ other_target_solar_term_number) end return setsu_date_time end