|
 |
CS 3723
Programming Languages |
Time and Date
Class Inheritance |
|
Date Example |
Python |
Python and Output |
# date1.py: class for dates
mon = [None,"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:
return False
elif d > 0 and d <= days[m]:
return True
elif m == 2 and d == 29 and is_leap(y):
return True
else:
return false
### end of: check_date
def is_leap(y):
if y%400 == 0 or (y%4 == 0 and y%100 != 0):
return True
else:
return False
### end of: is_leap
class Date:
def __init__(self, y, m, d):
self.year = y
self.month = m
self.day = d
### end of: __init__
def __str__(self):
return mon[self.month] + \
" " + str(self.day) + \
", " + str(self.year)
### end of: __str__
def incr_day(self):
self.day +=1
if not (self.month == 2 and \
is_leap(self.year) and \
self.day == 29) and \
self.day > days[self.month]:
self.day = 1
self.incr_month()
### end of: incr_day
def incr_month(self):
self.month +=1
if self.month > 12:
self.month = 1
self.incr_year()
### end of: incr_month
def incr_year(self):
self.year += 1
### end of: incr_year
### end of: date1 class
def test_date(y, m, d):
date = Date(y, m, d)
print "Start Date: ", date, " "
date.incr_day()
print " Next day: ", date , " "
date.incr_day()
print " Next day: ", date , " "
date.incr_day()
print " Next day: ", date, "\n"
|
print "TEST ORDINARY DATES"
test_date(2004, 4, 22)
test_date(2013, 3, 30)
test_date(2013, 4, 29)
print "\nTEST YEAR END"
test_date(2001, 12, 30)
test_date(1999, 12, 30)
print "\nTEST LEAP YEARS"
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)
% python date1.py
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
|
Time Example |
Python |
Python and Output |
# time1.py: class for times
def fill0(x):
if x < 0 or x > 59:
return ""
if x == 0:
return "00"
elif x < 10:
return "0" + str(x)
else:
return str(x)
*** end of: fill0
class Time:
def __init__(self, h, m, s):
self.hour = h
self.min = m
self.sec = s
### end of: __init__
def __str__(self):
return fill0(self.hour) + ":" + \
fill0(self.min) + ":" + \
fill0(self.sec)
### end of: __str__
def incr_sec(self):
self.sec +=1
if self.sec == 60:
self.sec = 0
self.incr_min()
### end of: incr_sec
def incr_min(self):
self.min +=1
if self.min == 60:
self.min = 0
self.incr_hour()
### end of: incr_min
def incr_hour(self):
self.hour += 1
if self.hour == 24:
self.hour = 0
### end of: incr_hour
### end of: date1 class
|
def test_time(y, m, d):
time = Time(y, m, d)
print "Start Time: ", time, " "
time.incr_sec()
print " Next sec: ", time , " "
time.incr_sec()
print " Next sec: ", time , " "
time.incr_sec()
print " Next sec: ", time, "\n"
print "TEST TIMES"
test_time(4, 31, 26)
test_time(12, 4, 58)
test_time(23, 59, 58)
% python time1.py
TEST TIMES
Start Time: 04:31:26
Next sec: 04:31:27
Next sec: 04:31:28
Next sec: 04:31:29
Start Time: 12:04:58
Next sec: 12:04:59
Next sec: 12:05:00
Next sec: 12:05:01
Start Time: 23:59:58
Next sec: 23:59:59
Next sec: 00:00:00
Next sec: 00:00:01
|
Date / Time Inheritance Example |
Python Date class |
Python Time class |
Output |
# timedate1.py: class for date and time
# date1.py: Date class in Python
mon = [None,"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:
return False
elif d > 0 and d <= days[m]:
return True
elif m == 2 and d == 29 and \
is_leap(y):
return True
else:
return false
### end of: check_date
def is_leap(y):
if y%400 == 0 or (y%4 == 0 and \
y%100 != 0):
return True
else:
return False
### end of: is_leap
class Date(object): # need "object"
def __init__(self, y, m, d):
self.year = y
self.month = m
self.day = d
### end of: __init__
def __str__(self):
return mon[self.month] + \
" " + str(self.day) + \
", " + str(self.year)
### end of: __str__
def incr_day(self):
self.day +=1
if not (self.month == 2 and \
is_leap(self.year) and \
self.day == 29) and \
self.day>days[self.month]:
self.day = 1
self.incr_month()
### end of: incr_day
def incr_month(self):
self.month +=1
if self.month > 12:
self.month = 1
self.incr_year()
### end of: incr_day
def incr_year(self):
self.year += 1
### end of: incr_day
### end of: date1 class
|
# Time class in Python
def fill0(x):
if x < 0 or x > 59:
return ""
if x == 0:
return "00"
elif x < 10:
return "0" + str(x)
else:
return str(x)
### end of: fill0
class Time(Date): # inherits from Date
def __init__(self, y, m, d, h, n, s):
# init from Time
super(Time,self).__init__(y,m,d)
self.hour = h
self.min = n # note: n, not m
self.sec = s
### end of: __init__
def __str__(self):
r = super(Time, self).__str__()
return r + " " + \
fill0(self.hour) + ":" + \
fill0(self.min) + ":" + \
fill0(self.sec)
### end of: __str__
def incr_sec(self):
self.sec +=1
if self.sec == 60:
self.sec = 0
self.incr_min()
### end of: incr_xec
def incr_min(self):
self.min +=1
if self.min == 60:
self.min = 0
self.incr_hour()
### end of: incr_sec
def incr_hour(self):
self.hour += 1
if self.hour == 24:
self.hour = 0
self.incr_day() # inherited!
# super(Time,self).incr_day()
### end of: incr_hour
### end of: Time class
def test_timedate(y, m, d, h, n, s):
timedate = Time(y, m, d, h, n, s)
print "\nStart:", timedate
for dum in range(0,3):
timedate.incr_sec()
print " Next:", timedate
### end of: test_timedate
print "TEST TIME/DATE"
test_timedate(2004, 4, 22, 4, 31, 26)
test_timedate(2004, 4, 22, 23, 59, 58)
test_timedate(2004, 4, 30, 23, 59, 58)
test_timedate(2004,12, 31, 23, 59, 58)
test_timedate(2001, 12, 31, 23, 59, 58)
test_timedate(1999, 12, 31, 23, 59, 58)
test_timedate(2004, 2, 28, 23, 59, 58)
test_timedate(2001, 2, 27, 23, 59, 58)
test_timedate(2000, 2, 28, 23, 59, 58)
test_timedate(1900, 2, 27, 23, 59, 58)
test_timedate(2100, 2, 27, 23, 59, 58)
|
% python timedate.py
TEST TIME/DATE
Start: Apr 22, 2004 04:31:26
Next: Apr 22, 2004 04:31:27
Next: Apr 22, 2004 04:31:28
Next: Apr 22, 2004 04:31:29
Start: Apr 22, 2004 23:59:58
Next: Apr 22, 2004 23:59:59
Next: Apr 23, 2004 00:00:00
Next: Apr 23, 2004 00:00:01
Start: Apr 30, 2004 23:59:58
Next: Apr 30, 2004 23:59:59
Next: May 1, 2004 00:00:00
Next: May 1, 2004 00:00:01
Start: Dec 31, 2004 23:59:58
Next: Dec 31, 2004 23:59:59
Next: Jan 1, 2005 00:00:00
Next: Jan 1, 2005 00:00:01
Start: Dec 31, 2001 23:59:58
Next: Dec 31, 2001 23:59:59
Next: Jan 1, 2002 00:00:00
Next: Jan 1, 2002 00:00:01
Start: Dec 31, 1999 23:59:58
Next: Dec 31, 1999 23:59:59
Next: Jan 1, 2000 00:00:00
Next: Jan 1, 2000 00:00:01
Start: Feb 28, 2004 23:59:58
Next: Feb 28, 2004 23:59:59
Next: Feb 29, 2004 00:00:00
Next: Feb 29, 2004 00:00:01
Start: Feb 27, 2001 23:59:58
Next: Feb 27, 2001 23:59:59
Next: Feb 28, 2001 00:00:00
Next: Feb 28, 2001 00:00:01
Start: Feb 28, 2000 23:59:58
Next: Feb 28, 2000 23:59:59
Next: Feb 29, 2000 00:00:00
Next: Feb 29, 2000 00:00:01
Start: Feb 27, 1900 23:59:58
Next: Feb 27, 1900 23:59:59
Next: Feb 28, 1900 00:00:00
Next: Feb 28, 1900 00:00:01
Start: Feb 27, 2100 23:59:58
Next: Feb 27, 2100 23:59:59
Next: Feb 28, 2100 00:00:00
Next: Feb 28, 2100 00:00:01
|
Notice above that you can write either self.incr_day(), or
Super(Time,self).incr_day().
(Revision date: 2014-12-15.
Please use ISO 8601,
the International Standard.)
|