ふなばです。

>>> Fri, 12 Mar 1999 14:48:47 +0900 の刻に 「ikarashi」、すなわち
>>> ikarashi / itlb.te.noda.sut.ac.jp(IKARASHI Akira) 氏曰く

ikarashi> というわけで、負数対応した修正版です。
ikarashi> atで新たにインスタンスを作りなおすようにしたので、
ikarashi> 状態は localtime ですが、誤りはなくなったと思います。

五十嵐さんのマネして、僕も書いてみました。閏秒も考慮したつもり。

class Time

  def addmon(n)
    d = Time.at(self)
    x = d.year * 12 + (d.mon - 1) + n
    y = x / 12
    m = x % 12 + 1
    g = Time.mktime(y, m, d.mday, 12)
    until g.mon == m
      g -= 86400
    end
    g = Time.mktime(g.year, g.mon, g.mday, d.hour, d.min, d.sec)
    until g.min == d.min
      g -= 1
    end
    g
  end

end

p Time.now.addmon(33)

ふなば ただよし