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.
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.
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.
De constructor heeft 1 argument, wat een tijdstip voorstelt.
public DateTime(String dateTime)
Het argument dateTime
zal steeds worden meegegeven zoals in deze voorbeelden:
28/04/2019 18:06:25
17/11/2013 02:09:53
Je klasse moet minstens onderstaande methoden hebben. Deze zijn gerangschikt in alfabetische volgorde, niet volgens moeilijkheid.
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.
public int getDay()
Deze methode geeft de voorgestelde dag terug. In het voorbeeld 28/04/2019 18:06:25
, zou dit 28
zijn.
public int getHour()
Deze methode geeft het voorgestelde uur terug. In het voorbeeld 28/04/2019 18:06:25
, zou dit 18
zijn.
public int getMinute()
Deze methode geeft de voorgestelde minuut terug. In het voorbeeld 28/04/2019 18:06:25
, zou dit 6
zijn.
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.
public int getSeconds()
Deze methode geeft het voorgestelde aantal seconden terug. In het voorbeeld 28/04/2019 18:06:25
, zou dit 25
zijn.
public int getYear()
Deze methode geeft het voorgestelde jaartal terug. In het voorbeeld 28/04/2019 18:06:25
, zou dit 2019
zijn.
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.
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:
35/12/2019 08:46:03
04/47/2019 04:07:41
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
}
}
Integer.parseInt(String)
gebruiken om een String om te zetten naar een integer.null
-argumenten in je equals-methode.