新井です。

In message "[ruby-list:34457] Re: カレンダー文字列を作るメソッド"
  on 16 Mar 2002 22:18:30 +0900,
  Take_tk <ggb03124 / nifty.ne.jp> wrote:
> たけ(tk)です。

> def days_in_month(year,month)
>   nextmonth = Time.at(
>     Time.local(year, month).tv_sec + 31*24*3600 )
>   daycount  = Time.at(
>     Time.local(nextmonth.year, nextmonth.mon).tv_sec - 1 ).mday
> end

この程度でもよいと思います。

  def days_in_month(year,month)
    month += 1
    if month == 13
      year += 1
      month = 1
    end
    (Time.local(year, month, 1) - 24*60*60).mday
  end

  p (1..12).collect {|m| days_in_month(2002, m)}

  => [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

Time.local はこういうときは、厳格な引数チェックが邪魔ですね。
(なんか、全然甘いようですが)

ruby 1.7.2 (2002-03-15)

  p Time.local(2002, 1, 32)
    => -:1:in `local': argument out of range (ArgumentError)
	    from -:1

  p Time.local(2002, 2, 30)
    => Sat Mar 02 00:00:00 JST 2002

  p Time.local(2002, 4, 31)

    => Wed May 01 00:00:00 JST 2002

--
新井康司 (Koji Arai)