1. ZonedDateTimeklasse
Er is nog een zeer interessante klasse in de Date Time API: de ZonedDateTimeklasse. Het belangrijkste doel is om het handig te maken om met datums in verschillende tijdzones te werken.
LocalDateis geweldig voor het weergeven van datums. Bijvoorbeeld verjaardagen. Mijn verjaardag is 15 maart, waar ik ook ben. Dit is een voorbeeld van een datum.
LocalTimeis 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 ZoneIdklasse uit het java.timepakket 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 ZoneIdgebruiken ;of()
| Code | Opmerking |
|---|---|
|
|
2. Een ZonedDateTimeobject maken
Wanneer u een object maakt , moet u de statische methode ZonedDateTimevan de klasse aanroepen en er een object aan doorgeven.now()ZoneId
| Code | Console-uitvoer |
|---|---|
|
|
Als je geen ZoneIdobject 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 ZonedDateTimeis 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 LocalDateTimeklas heeft de ZonedDateTimeklas 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 LocalDateTimeklasse. En natuurlijk ZonedDateTimeheeft 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 ZonedDateTimeobject:
| 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