1. Schakelen van de Date
klas naar de Calendar
klas
Programmeurs hielden van de Date
klasse vanwege zijn eenvoud en ondersteuning voor Unix-standaarden, maar zoals je weet, heeft elke roos zijn doornen.
Programmeurs wilden een "slimme" Date
klas. En ze kregen wat ze wilden in de vorm van de Calendar
klas. Het is bedacht als een manier om niet alleen datums op te slaan, maar ook om moeilijke bewerkingen met datums uit te voeren.
De volledige naam van de Calendar
klasse is java.util.Calendar. Vergeet het niet toe te voegen aan een importstatement als u besluit het in uw code te gebruiken.
U kunt een Calendar
object maken met deze opdracht:
Calendar date = Calendar.getInstance();
De statische getInstance()
methode van de Calendar
klasse maakt een Calendar
object dat is geïnitialiseerd met de huidige datum. De gewenste kalender wordt gemaakt op basis van de instellingen van de computer waarop het programma draait.
Of beter gezegd, de kalender die je krijgt... Dat komt omdat mensen op aarde niet beperkt zijn tot één enkele kalender. In plaats daarvan gebruiken ze er veel. En bijna elk van hen wordt geassocieerd met een religie of land. De Calendar
klas ondersteunt er 3:
Kalender | Beschrijving |
---|---|
Gregoriaanse kalender | Christelijke Gregoriaanse kalender |
Boeddhistische kalender | Boeddhistische kalender |
Japanse keizerlijke kalender | Japanse keizerlijke kalender |
Maar er zijn ook Chinese en Arabische kalenders. Kortom, werken met tijd is niet zo eenvoudig als het lijkt.
In de Chinese kalender is het jaar officieel 4716 ten tijde van het schrijven van deze les. En volgens de islamitische kalender is het jaar 1398. Welkom in de grote wereld, mijn vriend, programmeur.
2. Een kalenderobject maken
We zullen de Gregoriaanse kalender gebruiken, omdat deze de meest voorkomende ter wereld is. Tenminste totdat China Oracle koopt en de Chinese kalender de belangrijkste maakt.
U kunt een kalenderobject met elke datum maken met behulp van een instructie als deze:
Calendar date = new GregorianCalendar(year, month, day);
Ja, je moet GregorianCalendar
elke keer schrijven. In plaats van Calendar
, kun je ook schrijven GregorianCalendar
- dat werkt ook. Maar schrijven Calendar
is gewoon korter.
Het jaar moet voluit worden geschreven, je kunt bijvoorbeeld geen 19 schrijven in plaats van 2019. Maanden worden nog steeds genummerd vanaf nul. Maar zoals voorheen worden de dagen van de maand niet vanaf nul genummerd. Nerds!
Om zowel de tijd als de datum in te stellen, moet u de tijd doorgeven als aanvullende argumenten:
... = new GregorianCalendar(year, month, day, hours, minutes, seconds);
U kunt indien nodig zelfs in milliseconden passeren. Ze zijn de parameter na het aantal seconden.
3. Een kalenderobject op het scherm weergeven
Als je gewoon een kalenderobject op het scherm afdrukt, ben je niet erg tevreden met het resultaat.
Code |
---|
|
Console-uitvoer |
|
Het ding om hier in gedachten te houden is dat een kalender een kalender is, geen datum : het heeft allerlei instellingen die allemaal op het scherm worden weergegeven.
Het zou juist zijn om een SimpleDateFormat
object te gebruiken om een kalender weer te geven, maar totdat we het bestuderen, kun je deze lifehack gebruiken.
Date date = calendar.getTime();
Een Calendar
object kan eenvoudig worden omgezet in een Date
object en u weet al hoe u een Date
object moet weergeven. U kunt code als deze gebruiken om een Calendar
object te converteren naar een Date
:
De methode gebruiken getTime()
:
Code | Console-uitvoer |
---|---|
|
|
Dat is toch iets heel anders, niet?
4. Werken met elementen van een datum
Om een specifiek element van een datum te krijgen (bv. het jaar, de maand, ...), Calendar
heeft de klas de get()
methode. Het is een enkele methode, maar het heeft parameters:
int month = calendar.get(Calendar.MONTH);
Waar calendar
is een Calendar
variabele en MONTH
is een constant veld van de Calendar
klasse.
U geeft een van de Calendar
constante velden van de klasse door als argument aan de get
methode en u krijgt de gewenste waarde als resultaat.
Voorbeelden
Code | Beschrijving |
---|---|
|
jaartelling (voor of na de gewone jaartelling) jaar maand dag van de maand dag van de week uren minuten seconden |
Gebruik de methode om een element van een datum te wijzigen set
:
calendar.set(Calendar.MONTH, value);
Waar calendar
is een Calendar
variabele en MONTH
is een constant veld van de Calendar
klasse.
Wanneer u met set
de methode werkt, geeft u een van de Calendar
constante velden van de klasse door als het eerste argument en de nieuwe waarde als het tweede argument.
Voorbeelden
Code | Beschrijving |
---|---|
|
jaar = 2019 maand = juli (genummerd vanaf 0) 4e dag uren minuten seconden |
5. Constanten van de Calendar
klas
De constante velden van de Calendar
klasse zijn niet beperkt tot die voor het benoemen van elementen van een datum. Er lijken velden te zijn voor elke gelegenheid.
Calendar date = new GregorianCalendar(2019, Calendar.JANUARY, 31);
Er zijn bijvoorbeeld constante velden om naar maanden te verwijzen:
En ook de dagen van de week:
Calendar calendar = new GregorianCalendar(2019, Calendar.JANUARY, 31);
if (calendar.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY)
{
System.out.println("It's Friday");
}
We zullen niet alles opsommen. We willen gewoon niet dat je verrast bent als je constanten zoals deze in de code ziet.
Het gebruik van constanten maakt de code leesbaarder, daarom gebruiken de programmeurs ze. En maanden zijn ook genummerd vanaf nul om de leesbaarheid te verbeteren. Of niet.
Calendar
6. De datum in een object wijzigen
De Calendar
klas heeft een methode waarmee je op een intelligentere manier op een date kunt werken. U kunt bijvoorbeeld een jaar, een maand of meerdere dagen toevoegen aan een datum. Of haal ze weg. Deze methode wordt genoemd add()
. Het werken ermee ziet er zo uit:
calendar.add(Calendar.MONTH, value);
Waar calendar
is een Calendar
variabele en MONTH
is een constant veld van de Calendar
klasse.
Wanneer u met add
de methode werkt, geeft u een van de Calendar
constante velden van de klasse door als het eerste argument en als het tweede argument — de nieuwe waarde die moet worden toegevoegd.
Dit is een andere intelligente methode. Laten we eens kijken hoe slim het is:
Code |
---|
|
Console-uitvoer |
|
Deze methode gaat ervan uit dat er slechts 28 dagen zijn in februari 2019, dus de resulterende datum is 1 maart.
Laten we nu 2 maanden wegnemen! Wat moeten we krijgen? 27 december 2018! Laten we nu kijken.
Om een bewerking uit te voeren die resulteert in een eerdere datum, moet u een negatieve waarde doorgeven aan de add()
methode:
Code |
---|
|
Console-uitvoer |
|
Het werkt!
Deze methode houdt rekening met de verschillende lengtes van maanden en schrikkeljaren. Al met al een prima methode. Het is precies wat de meeste programmeurs die met datums werken nodig hebben.
7. Rollende elementen van een datum
Maar soms zijn er situaties waarin we dit slimme gedrag niet willen, je wilt bijvoorbeeld iets aan een deel van de date doen zonder al het andere te veranderen.
De Calendar
klas heeft roll()
hiervoor de speciale methode. De handtekening is net als de add()
methode, maar deze methode verandert slechts één element van de datum en laat de rest ongewijzigd.
Voorbeeld:
Code |
---|
|
Console-uitvoer |
|
We veranderden de maand, maar het jaar en de datum bleven ongewijzigd.