#!/usr/bin/ruby
class Date1
attr_reader :year, :month, :day
def initialize(y, m, d)
if check_date(y, m, d)
@year, @month, @day = y, m, d
else
@year, @month, @day = 2000, 1, 1
end
end
@@mon = [nil,"Jan","Feb","Mar","Apr",
"May","Jun","Jul","Aug",
"Sep","Oct","Nov","Dec"]
@@days = [0, 31, 28, 31, 30, 31, 30,
31, 31, 30, 31, 30, 31]
def check_date(y, m, d)
if m < 1 or m > 12 or
d < 0 or d > 31 or y < 0
false
elsif d > 0 and d <= @@days[m]
true
elsif m == 2 and d == 29 and
is_leap(y)
true
else
false
end
end
def is_leap(y)
if (y%400 == 0 or
(y%4 == 0 and y%100 != 0) )
true
else
false
end
end
def to_s
@@mon[@month] + " " + day.to_s +
", " + year.to_s
end
def incr_day
@day +=1
if not (@month == 2 and
is_leap(@year) and
@day == 29) and
@day > @@days[@month]
@day = 1
incr_month
end
end
def incr_month
@month +=1
if @month > 12
@month = 1
incr_year
end
end
def incr_year
@year += 1
end
end
|
def test_date(y, m, d)
date = Date1.new(y, m, d)
print "Start Date: ", date," "
date.incr_day
print "\n Next day: ", date
date.incr_day
print "\n Next day: ", date
date.incr_day
print "\n Next day: ", date,
"\n"
end
print "TEST ORDINARY DATES\n"
test_date(2004, 4, 22)
test_date(2013, 3, 30)
test_date(2013, 4, 29)
print "\nTEST YEAR END\n"
test_date(2001, 12, 30)
test_date(1999, 12, 30)
print "\nTEST LEAP YEARS\n"
test_date(2004, 2, 28)
test_date(2001, 2, 27)
test_date(2000, 2, 28)
test_date(1900, 2, 27)
test_date(2100, 2, 27) % ruby date.rb
TEST ORDINARY DATES
Start Date: Apr 22, 2004
Next day: Apr 23, 2004
Next day: Apr 24, 2004
Next day: Apr 25, 2004
Start Date: Mar 30, 2013
Next day: Mar 31, 2013
Next day: Apr 1, 2013
Next day: Apr 2, 2013
Start Date: Apr 29, 2013
Next day: Apr 30, 2013
Next day: May 1, 2013
Next day: May 2, 2013
TEST YEAR END
Start Date: Dec 30, 2001
Next day: Dec 31, 2001
Next day: Jan 1, 2002
Next day: Jan 2, 2002
Start Date: Dec 30, 1999
Next day: Dec 31, 1999
Next day: Jan 1, 2000
Next day: Jan 2, 2000
TEST LEAP YEARS
Start Date: Feb 28, 2004
Next day: Feb 29, 2004
Next day: Mar 1, 2004
Next day: Mar 2, 2004
Start Date: Feb 27, 2001
Next day: Feb 28, 2001
Next day: Mar 1, 2001
Next day: Mar 2, 2001
Start Date: Feb 28, 2000
Next day: Feb 29, 2000
Next day: Mar 1, 2000
Next day: Mar 2, 2000
Start Date: Feb 27, 1900
Next day: Feb 28, 1900
Next day: Mar 1, 1900
Next day: Mar 2, 1900
Start Date: Feb 27, 2100
Next day: Feb 28, 2100
Next day: Mar 1, 2100
Next day: Mar 2, 2100 |