# 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