- COMP.CS.140
- 5. Inheritance
- 5.5 ⌛ Date and time
⌛ Date and time¶
The exercise is returned as a Maven project. Place the pom.xml file
in the round5/datetime directory of your local repository
and create to this directory the src/main/java subdirectory. Create class files
Date.java, DateTime.java and DateException.java and attach them to the fi.tuni.prog3.datetime package.
Your files should be in the round5/datetime/src/main/java/fi/tuni/prog3/datetime
directory.
This is an introductory exercise about inheritance. Implement the following public classes for handling dates and times.
Class
Datethat stores a date, that is, day of month, month and year. 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 typeDateExceptionwith 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.formatand the"%02d"format specifier.
Class
DateTimethat inherits the classDateand 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 typeDateExceptionwith 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 bytoStringof 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
toStringof 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
DateExceptionthat inherits the Java library classExceptionand which has a constructor of formDateException(String msg)that simply passes the parametermsgto the constructor of the superclassException.
The automatic tests, and the ones given below, assume that you make the following definitions
in your pom.xml project file:
The value of
artifactIdisdatetime.The value of
versionis1.0.The values of the
maven.compiler.sourceandmaven.compiler.targetelements are17or lower. The grader uses Java 17, so any newer versions won’t work.A Onejar plugin definition where the value of
mainClassisDateTimeTestwhich is the name of the given test class (see below).
Example tests¶
The automated grader tests your class implementations with roughly the following test program:
import java.util.ArrayList;
import fi.tuni.prog3.datetime.Date;
import fi.tuni.prog3.datetime.DateException;
import fi.tuni.prog3.datetime.DateTime;
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 -jar target/datetime-1.0.one-jar.jar "2015 1 1" "1999 12 31 23 59 59" "2012 13 20"
fi.tuni.prog3.datetime.DateException: Illegal date 20.13.2012
Date #1: 01.01.2015
Date #2: 31.12.1999 23:59:59
java -jar target/datetime-1.0.one-jar.jar "1998 01 24" "1999 02 03 17 60 17" "2010 01 20 6 55 12" "2012 07 28" "2021 02 02"
fi.tuni.prog3.datetime.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.