Later in je opleiding kan het gebeuren dat je tijdsgebaseerde data moet analyseren, die bijvoorbeeld opgeslagen is in tekstbestanden. In deze opgave zul je daarom een klasse schrijven die een tijdstip in String-vorm, kan verwerken.

Schrikkeljaar

Een van de methodes die je hieronder zal definiëren, controleert of het jaartal in de datum een schrikkeljaar is. Een schrikkeljaar is, volgens Wikipedia1, een jaar dat voldoet aan volgende definitie:

De schrikkeldag valt in de Gregoriaanse kalender op 29 februari en komt voor als het jaartal restloos deelbaar is door 4, maar niet door 100 – tenzij het jaartal restloos deelbaar door 400 is. Zo waren 2004, 2008, 2012 en 2016 (allemaal deelbaar door 4, maar niet door 100) schrikkeljaren. Ook 1600 (deelbaar door 400) was een schrikkeljaar. 1700, 1800 en 1900 waren dat niet (deelbaar door 100, maar niet door 400) en 2000 weer wel.

Opgave

Schrijf een Java-klasse DateTime. Deze klasse stelt een datum en tijdstip voor en moet volgende constructor en minstens volgende methoden bevatten. Je bent volledig vrij om de nodige instantievariabelen te kiezen en het is ook toegelaten (en aangeraden!) om extra methodes toe te voegen, dit kan je helpen bij het zoeken naar fouten.

Constructor

De constructor heeft 1 argument, wat een tijdstip voorstelt.

public DateTime(String dateTime)

Het argument dateTime zal steeds worden meegegeven zoals in deze voorbeelden:

Methodes

Je klasse moet minstens onderstaande methoden hebben. Deze zijn gerangschikt in alfabetische volgorde, niet volgens moeilijkheid.

equals()

public boolean equals(Object other)

Deze equals()-methode geeft true terug als deze instantie van de DateTime-klasse exact hetzelfde tijdstip (tot op de seconde) voorstelt als het meegegeven object.

getDay()

public int getDay()

Deze methode geeft de voorgestelde dag terug. In het voorbeeld 28/04/2019 18:06:25, zou dit 28 zijn.

getHour()

public int getHour()

Deze methode geeft het voorgestelde uur terug. In het voorbeeld 28/04/2019 18:06:25, zou dit 18 zijn.

getMinute()

public int getMinute()

Deze methode geeft de voorgestelde minuut terug. In het voorbeeld 28/04/2019 18:06:25, zou dit 6 zijn.

getMonth()

public int getMonth()

Deze methode geeft de voorgestelde maand terug. In het voorbeeld 28/04/2019 18:06:25, zou dit 4 zijn. Hou er rekening mee dat maanden beginnen bij 1 en niet bij 0.

getSeconds()

public int getSeconds()

Deze methode geeft het voorgestelde aantal seconden terug. In het voorbeeld 28/04/2019 18:06:25, zou dit 25 zijn.

getYear()

public int getYear()

Deze methode geeft het voorgestelde jaartal terug. In het voorbeeld 28/04/2019 18:06:25, zou dit 2019 zijn.

isLeapYear()

public boolean isLeapYear()

Deze methode controleert of het jaartal in het voorgestelde jaartal een schrikkeljaar is, volgens bovenstaande definitie van een schrikkeljaar. Indien dit het geval is, geeft deze methode true terug.

isValid()

public boolean isValid()

Deze methode controleert of het voorgestelde tijdstip geldig is. Indien het tijdstip geldig is, geeft deze methode true terug. Voorbeelden van ongeldige tijdstippen zijn:

Lokaal testen

Het is aangeraden om je oplossing lokaal uit te proberen en optioneel wat print-statements toe te voegen om je te helpen debuggen. Dit kan je simpelweg doen door aan je klasse een main-methode toe te voegen, net zoals in vorige opgaves.

public class DateTime {
    // Constructor en andere methodes staan hierboven.

    public static void main(String[] args){
        DateTime tijdstip = new DateTime("28/04/2019 18:06:25");
        System.out.println(tijdstip.getDay()); // output: 28
    }
}

Opmerkingen en tips