1. Schakelen van de Dateklas naar de Calendarklas
Programmeurs hielden van de Dateklasse vanwege zijn eenvoud en ondersteuning voor Unix-standaarden, maar zoals je weet, heeft elke roos zijn doornen.
Programmeurs wilden een "slimme" Dateklas. En ze kregen wat ze wilden in de vorm van de Calendarklas. 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 Calendarklasse 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 Calendarobject maken met deze opdracht:
Calendar date = Calendar.getInstance();
De statische getInstance()methode van de Calendarklasse maakt een Calendarobject 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 Calendarklas 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 GregorianCalendarelke keer schrijven. In plaats van Calendar, kun je ook schrijven GregorianCalendar- dat werkt ook. Maar schrijven Calendaris 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 SimpleDateFormatobject te gebruiken om een kalender weer te geven, maar totdat we het bestuderen, kun je deze lifehack gebruiken.
Date date = calendar.getTime();
Een Calendarobject kan eenvoudig worden omgezet in een Dateobject en u weet al hoe u een Dateobject moet weergeven. U kunt code als deze gebruiken om een Calendarobject 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, ...), Calendarheeft de klas de get()methode. Het is een enkele methode, maar het heeft parameters:
int month = calendar.get(Calendar.MONTH);
Waar calendaris een Calendarvariabele en MONTHis een constant veld van de Calendarklasse.
U geeft een van de Calendarconstante velden van de klasse door als argument aan de getmethode 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 calendaris een Calendarvariabele en MONTHis een constant veld van de Calendarklasse.
Wanneer u met setde methode werkt, geeft u een van de Calendarconstante 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 Calendarklas
De constante velden van de Calendarklasse 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.
Calendar6. De datum in een object wijzigen
De Calendarklas 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 calendaris een Calendarvariabele en MONTHis een constant veld van de Calendarklasse.
Wanneer u met addde methode werkt, geeft u een van de Calendarconstante 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 Calendarklas 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.
GO TO FULL VERSION