Time (leap year??)

C

csjasnoch

Is there a simple way to see if a year is a leap year (rather than
writting an algorithm I wanted to check if it is already implimented
first)

It would be kewl if there was just a check on a Time var


Like,

now = Time.new
flag = now.leapyear?
 
C

csjasnoch

I know I could do somethine like this (and it works for future years)


now = Time.new

leap = now.year%4

if(learp == 0)
flag = true



#############

But if I were to use mktime and involved past dates I would have to be
weary of the millenias.

How does it work
Every 4 years, every hundred but not every millenia.. Or is it also not
every 100?

FYI I am trying to make a weekday hash generator. So I send the year
and month and get all weekdays for every day of the month.
 
D

David A. Black

Hi --

Is there a simple way to see if a year is a leap year (rather than
writting an algorithm I wanted to check if it is already implimented
first)

It would be kewl if there was just a check on a Time var


Like,

now = Time.new
flag = now.leapyear?

Yes:

irb(main):023:0> Date.today.leap?
=> false
irb(main):024:0> (Date.today << 12).leap?
=> true


David
 
K

Kirk Haines

Is there a simple way to see if a year is a leap year (rather than
writting an algorithm I wanted to check if it is already implimented
first)

It would be kewl if there was just a check on a Time var

irb(main):001:0> require 'date'
=> true
irb(main):002:0> d = Date.parse(Time.now.to_s)
=> #<Date: 4907227/2,0,2299161>
irb(main):003:0> d.to_s
=> "2005-08-31"
irb(main):004:0> d.leap?
=> false


Kirk Haines
 
K

Kirk Haines

Thanks Kirk. That should get me to where I need.

As you saw, there are more concise ways to do a check for today, but that
general pattern will work for any date that you need to parse. If you are
going from Time to Date a lot, you might want to define something like this:

class Time
def to_date
Date.new(year,month,day)
end
end

Take a look at the difference between Date/DateTime and Time classes. They
are very different. Date/time is stored in a completely different format,
and for the most part they offer completely different sets of methods.


Kirk Haines
 
G

Gavin Kistner

How does it work
Every 4 years, every hundred but not every millenia.. Or is it also
not
every 100?

"Every year divisible by 4 is a leap year.
But every year divisible by 100 is NOT a leap year
Unless the year is also divisible by 400, then it is still a leap year."
-- http://www.timeanddate.com/date/leapyear.html

So to calculate it on your own:
irb(main):001:0> def is_leap?( year ); year % 4 == 0 && ( year % 100 !
= 0 || year % 400 == 0 ); end
=> nil
irb(main):002:0> is_leap? 1996
=> true
irb(main):003:0> is_leap? 1997
=> false
irb(main):004:0> is_leap? 2000
=> true
irb(main):005:0> is_leap? 2100
=> false
irb(main):006:0> is_leap? 2300
=> false
irb(main):007:0> is_leap? 2400
=> true
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,581
Members
45,057
Latest member
KetoBeezACVGummies

Latest Threads

Top