たけ(tk)です。

[ruby-list:34465] Re: カレンダー文字列を作るメソッド にて 
"Miura Hideki" <m-72 / tf6.so-net.ne.jp> さん 曰く:
》  #           1  2days = [0, 31, Time.local(year, 3).yday - Time.local(year, 2).yday,#        3   4   5   6   7   8   9  10  11  1231, 30, 31, 30, 31, 31, 30, 31, 30, 31]

 そうかぁ。うるう年かどうかは Time#yday で分かるんだ。

def days_in_month(year,month)
  [31, Time.local(year, 3).yday - Time.local(year, 2).yday,
          31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month-1]
end

 とすると、こう言うのもありだな。

def leap_year?( year )
  Time.local( year,12,31 ).yday == 366
end

def days_in_month(year,month)
  return 29 if month==2 && leap_year?( year )
  return [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month-1]
end

p days_in_month(2000,2)

  中田さんが言っていたZellerの公式というのはこれかな?。

def leap_year?( year )
  ( year % 4 == 0 )&&(( year % 100 != 0 )||( year % 400 == 0 ))
end

 と・・、書いているうちに新井さんから新案が・・。その月の月末の日付を調
べるだけでもいいというわけか・・。

--

》  (1..days[month] + wday).each{|d|s << "%4s" % (d <= wday ? "    ": (d - wday).to_s)s << "\n" if d % 7 == 0}

 そうかぁ。d を桁位置で考えるわけか・・。

 いろいろ参考になります。・・ううう。どれを採用するかが決まらなくなって
しまった・・。

Take_tk = KUMAGAI Hidetake
たけ(tk)=熊谷秀武