⌛ Päivämäärä ja aika¶
Aseta vastauksesi tiedostoihin Date.java, DateTime.java ja DateException.java kansiossa Round5/datetime.
Tässä tehtävässä kokeillaan perintää toteuttamalla seuraavat yksinkertaiset luokat päivämäärän ja mahdollisesti myös kellonajan käsittelyyn.
Luokka
Date, joka tallettaa päivämäärän eli päivän, kuukauden ja vuoden. Julkiset jäsenet:Rakennin
Date(int year, int month, int day), joka alustaa olion kuvaamaan parametrien mukaista päivämäärää. Rakennin tarkistaa, onko päivämäärä laillinen, ja ellei se ole, heittää rakenninDateException-poikkeuksen, jolla on muotoa “Illegal date day.month.year” oleva viesti. Päivä ja kuukausi esitetään kahdella numeromerkillä.Voit käyttää päivämäärän tarkistamiseen esimerkiksi ensimmäisessä Java-materiaalissa esitettyä päivämäärän tarkistusesimerkkiä.
Jäsenfunktiot
int getYear(),int getMonth()jaint getDay(), jotka palauttavat nimiään vastaavat jäsenmuuttujat.Jäsenfunktio
String toString(), joka palauttaa olion päivämäärän muodossa “day.month.year” esittävän merkkijonon. Päivä ja kuukausi esitetään kahdella numeromerkillä.
Luokka
DateTime, joka perii luokanDateja joka itse tallettaa lisäksi kellonajan eli tunnit, minuutit ja sekunnit. Julkiset jäsenet:Rakennin
DateTime(int year, int month, int day, int hour, int minute, int second), joka alustaa olion kuvaamaan parametrien mukaista päivämäärää ja kellonaikaa. Rakennin tarkistaa, onko kellonaika laillinen (tunnit 0-23, minuutit ja sekunnit 0-59), ja ellei se ole, heittää rakenninDateException-poikkeuksen, jolla on muotoa “Illegal time hour:minute:second” oleva viesti. Kukin kellonajan osa esitetään kahdella numeromerkillä.Jäsenfunktiot
int getHour(),int getMinute()jaint getSecond(), jotka palauttavat nimiään vastaavat jäsenmuuttujat.Jäsenfunktio
String toString(), joka palauttaa merkkijonon, jossa on ensin yliluokanDatetoString-funktion tuottama merkkijono, sitten välilyönti, ja sitten kellonaika muodossa “hour:minute:second”. Kukin kellonajan osa esitetään kahdella numeromerkillä.Funktiossa voi kutsua yliluokan
toString-funktiota avainsanansuperavulla tapaansuper.toString(). Suorita tämä kutsu, ja liitä sen palauttaman merkkijonon perään välilyönti ja kellonaika.
Luokka
DateException, joka perii Javan luokkakirjaston luokanExceptionja jolla on muotoaDateException(String msg)oleva rakennin, joka välittää parametrinmsgyliluokanExceptionrakentimelle.
Esimerkkitestejä¶
Automaattiset testit testaavat luokkiasi suunnilleen seuraavanlaisella testiohjelmalla:
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));
}
}
}
Alla on kuvattu esimerkiksi kaksi testiohjelman suoritusta odotettuine tuloksineen:
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+ esittää tässä kohdassa tehtävän palautuslomakkeen.