Is there a decent canonical way to get total days in a month from say Time class?

I suppose I could flip through local until I generate an exception, but
somehow
I would think there would be a set of class methods to get:

daysofmonth = Time.daysofmonth(y,m)
daysofyear = Time.daysofyear(y)
leapday = Time.leapday?(y)
leapseconds = Time.leapseconds?(y)

??
xc

Xeno C. wrote:

I suppose I could flip through local until I generate an exception, but
somehow I would think there would be a set of class methods to get:

Here’s a fairly simple sequence I found on the net using Date
(attributions to
kelyar, jgwong, and timmorgan, whoever they are):

#!/usr/bin/ruby

require ‘date’

d0 = Date.new(2009,6,1)
puts “trace d0: #{d0}”

d1 = d0 >> 1
puts “trace d1: #{d1}”

d2 = d1 - 1
puts “trace d2: #{d2}”

d3 = d2.day
puts “trace d3: #{d3}”
—snip—
the above are my own illustration of what the authors show in their blog
posts.

On Thu, Jun 11, 2009 at 9:19 AM, Xeno
Campanoli[email protected] wrote:

require ‘date’

d0 = Date.new(2009,6,1)
puts “trace d0: #{d0}”

you could jump to end by using negative day

d0 = Date.new(2009,12,-1)
=> #<Date: 2009-12-31 (4910393/2,0,2299161)>
d0.day
=> 31

botp wrote:

require ‘date’

That is nice. Thanks.

On Thu, Jun 11, 2009 at 3:02 AM, Xeno
Campanoli[email protected] wrote:

I suppose I could flip through local until I generate an exception, but
somehow I would think there would be a set of class methods to get:

   daysofmonth = Time.daysofmonth(y,m)

Do you want to get the maximum number of days for a given year/month
combination? Here you go:

def days_of_month(year=Time.now.year, m=1)
(Date.new(year,12,31)<<12-month).day
end

days_of_month(2004, 2) # => 29
days_of_month(2003, 2) # => 28

Michael