1. ZonedDateTime
klasse
Er is nog een zeer interessante klasse in de Date Time API: de ZonedDateTime
klasse. Het belangrijkste doel is om het handig te maken om met datums in verschillende tijdzones te werken.
LocalDate
is geweldig voor het weergeven van datums. Bijvoorbeeld verjaardagen. Mijn verjaardag is 15 maart, waar ik ook ben. Dit is een voorbeeld van een datum.
LocalTime
is geweldig om tijd te beschrijven, zoals de tijd die is ingesteld op een wekker: ik zet de wekker op 05:00 uur en het maakt niet uit waar ik ben. 5:00 uur is 5:00 uur. Dit is een voorbeeld van werken met tijd.
Laten we nu zeggen dat we een applicatie schrijven die vluchten boekt. Vliegtuigen vertrekken en arriveren op basis van de lokale tijd. Het vliegtuig is voor een vaste tijd in de lucht, maar de tijdzones kunnen veranderen.
Tijdzones
Trouwens, tijdzones zijn een echte puinhoop. En als je denkt dat er 24 tijdzones zijn, dan vergis je je enorm.
De tijd in India verschilt bijvoorbeeld vijf en een half uur van Greenwich Mean Time: GMT+5:30
. Sommige landen schakelen over op zomertijd, andere niet. Bovendien schakelen verschillende landen op verschillende tijden van het jaar over naar de zomertijd.
En sommige landen nemen wetten aan die de zomertijd annuleren, opnieuw invoeren of opnieuw annuleren.
Hoe dan ook, de wereld heeft tijdzones en binnen elke tijdzone is er één tijd. De tijd in verschillende zones kan in bepaalde periodes van het jaar samenvallen en in andere periodes verschillen. Tijdzones worden meestal genoemd naar de grote steden die zich daarin bevinden: Europe/Monaco
, Asia/Singapore
, maar er zijn ook uitzonderingen — US/Pacific
.
Officieel zijn er op dit moment 599 tijdzones. Denk er eens over na: 599. Dat is verre van 24. Welkom in de globale wereld.
De ZoneId
klasse uit het java.time
pakket wordt gebruikt om een tijdzone in Java op te slaan.
Het heeft trouwens een statische getAvailableZoneIds()
methode, die de set van alle momenteel bekende tijdzones retourneert. Om een lijst van alle zones te krijgen, moet u de volgende code schrijven:
Code | Console-uitvoer (gedeeltelijk) |
---|---|
|
|
Om een object bij zijn naam te krijgen , moet u de statische methode ZoneId
gebruiken ;of()
Code | Opmerking |
---|---|
|
|
2. Een ZonedDateTime
object maken
Wanneer u een object maakt , moet u de statische methode ZonedDateTime
van de klasse aanroepen en er een object aan doorgeven.now()
ZoneId
Code | Console-uitvoer |
---|---|
|
|
Als je geen ZoneId
object doorgeeft aan de now()
methode (en dat mag), dan wordt de tijdzone automatisch bepaald op basis van de instellingen van de computer waarop het programma draait.
Voorbeeld:
Code | Console-uitvoer |
---|---|
|
|
Een globale datum omzetten in een lokale
Een van de interessante kenmerken van ZonedDateTime
is de mogelijkheid om te converteren naar een lokale datum en tijd. Voorbeeld:
ZoneId zone = ZoneId.of("Africa/Cairo");
ZonedDateTime cairoTime = ZonedDateTime.now(zone);
LocalDate localDate = cairoTime.toLocalDate();
LocalTime localTime = cairoTime.toLocalTime();
LocalDateTime localDateTime = cairoTime.toLocalDateTime();
3. Werken met de tijd
Net als de LocalDateTime
klas heeft de ZonedDateTime
klas veel manieren om individuele elementen van een datum en tijd te krijgen. Hier is een lijst van deze methoden:
|
Retourneert het jaar van een specifieke datum |
|
Retourneert de maand van de datum: een van meerdere constanten —JANUARY, FEBRUARY, ...; |
|
Retourneert de index van de maand van de datum. januari == 1 |
|
Retourneert de index van de dag van de maand |
|
Retourneert de dag van de week: een van meerdere constanten —MONDAY, TUESDAY, ...; |
|
Retourneert de index van de dag van het jaar |
|
Retourneert de uren |
|
Retourneert de minuten |
|
Retourneert de seconden |
|
Retourneert de nanoseconden |
Alle methoden zijn perfect analoog aan de methoden van de LocalDateTime
klasse. En natuurlijk ZonedDateTime
heeft de klas methoden waarmee je met datums en tijden kunt werken. Dat gezegd hebbende, verandert het object waarop de methoden worden aangeroepen niet. In plaats daarvan retourneren ze een nieuw ZonedDateTime
object:
methoden | Beschrijving |
---|---|
|
Voegt jaren toe aan de datum |
|
Voegt maanden toe aan de datum |
|
Voegt dagen toe aan de datum |
|
Voegt uren toe |
|
Voegt minuten toe |
|
Voegt seconden toe |
|
Voegt nanoseconden toe |
|
Trekt jaren af van de datum |
|
Trekt maanden af van de datum |
|
Trekt dagen af van de datum |
|
Trekt uren af |
|
Trekt minuten af |
|
Trekt seconden af |
|
Trekt nanoseconden af |
We zullen geen voorbeelden geven, omdat we denken dat alles hier duidelijk is naar analogie van de klassen die we zojuist hebben overwogen.
GO TO FULL VERSION