- COMP.CS.140
- 5. Inheritance
- 5.5 ⌛ Date and time
⌛ Date and time¶
Place your code into files named Date.java, DateTime.java and DateException.java in the round5/datetime folder of your local repository. The remote material repository contains empty files for the above-mentioned classes.
This is an introductory exercise about inheritance. Implement the following public classes for handling dates and times.
Class
Date
that stores a date, that is, day of month, month and years. Public members:Constructor
Date(int year, int month, int day)
that initializes the object to represent the date specified by the parameters. The constructor checks if the date is legal, and if it is not, throws an exception of typeDateException
with a message of form “Illegal date day.month.year”. Both day and month are expressed using two digits.You may use, for example, the example code from the course’s earlier Java material for checking, if a date is legal.
Member functions
int getYear()
,int getMonth()
andint getDay()
that return the corresponding values.Member function
String toString()
that returns a string that describes the date of this object in the form “day.month.year”. Both day and month are expressed using two digits. Tip:String.format
and the"%02d"
format specifier.
Class
DateTime
that inherits the classDate
and in addition stores information about time, that is, hour, minute and second. Public members:Constructor
DateTime(int year, int month, int day, int hour, int minute, int second)
that initializes the object according to the parameters. The constructor checks if the time is legal (hour 0–23, minute and second 0–59), and if it is not, throws an exception of typeDateException
with a message of form “Illegal time hour:minute:second”. Each part of the time is expressed using two digits.Member functions
int getHour()
,int getMinute()
andint getSecond()
that return the corresponding values.Member function
String toString()
that returns a string formed by first the string returned bytoString
of the superclassDate
, then a space, and then a string that represents this object’s time in the form “hour:minute:second”. Each part of the time is expressed using two digits.The function may call
toString
of the superclass via the keywordsuper
, that is, assuper.toString()
. First perform this call and then append the result with a space and a time string of the form described above.
Class
DateException
that inherits Java library classException
and which has a constructor of formDateException(String msg)
that simply passes the parametermsg
to the constructor of the superclassException
.
Example tests¶
The automated grader tests your class implementations with roughly the following test program:
import java.util.ArrayList;
public class DateTimeTest {
public static void main(String args[]) {
ArrayList<Date> dates = new ArrayList<>();
for (String arg : args) {
try {
String[] parts = arg.split(" ");
if (parts.length == 3) {
dates.add(new Date(Integer.parseInt(parts[0]), Integer
.parseInt(parts[1]),
Integer.parseInt(parts[2])));
} else if (parts.length == 6) {
dates.add(new DateTime(Integer.parseInt(parts[0]), Integer.parseInt(
parts[1]), Integer.parseInt(parts[2]), Integer
.parseInt(parts[3]), Integer.parseInt(parts[4]), Integer
.parseInt(parts[5])));
}
} catch (DateException e) {
System.out.println(e);
}
}
for (int i = 0; i < dates.size(); i++) {
System.out.format("Date #%d: %s%n", i + 1, dates.get(i));
}
}
}
Below are two example test program runs and their expected ouputs:
java DateTimeTest "2015 1 1" "1999 12 31 23 59 59" "2012 13 20"
DateException: Illegal date 20.13.2012
Date #1: 01.01.2015
Date #2: 31.12.1999 23:59:59
java DateTimeTest "1998 01 24" "1999 02 03 17 60 17" "2010 01 20 6 55 12" "2012 07 28" "2021 02 02"
DateException: Illegal time 17:60:17
Date #1: 24.01.1998
Date #2: 20.01.2010 06:55:12
Date #3: 28.07.2012
Date #4: 02.02.2021
A+ presents the exercise submission form here.