ZoneOffset in Java

1. Inleiding

In onze wereld volgt elk land een bepaalde tijdzone. Deze tijdzones zijn cruciaal om tijd gemakkelijk en effectief uit te drukken. Tijdzones kunnen echter soms onduidelijk zijn vanwege variabelen zoals zomertijd die in beeld komen.

Bovendien, terwijl deze tijdzones in onze code worden weergegeven, kunnen dingen verwarrend worden. Java heeft meerdere klassen geleverd, zoals Datum, Tijd en Datum Tijd in het verleden om ook voor tijdzones te zorgen.

Er zijn echter nieuwe Java-versies met meer bruikbare en expressieve klassen zoals ZoneId en ZoneOffset, voor het beheren van tijdzones.

In dit artikel, we bespreken ZoneId en ZoneOffset evenals gerelateerd Datum Tijd klassen.

We kunnen ook lezen over de nieuwe set van Datum Tijd klassen geïntroduceerd in Java 8, in ons vorige bericht.

2. ZoneId en ZoneOffset

Met de komst van JSR-310 zijn enkele handige API's toegevoegd voor het beheren van datum, tijd en tijdzones. ZoneId en ZoneOffset klassen zijn ook toegevoegd als onderdeel van deze update.

2.1. ZoneId

Zoals hierboven vermeld, ZoneId is een weergave van de tijdzone zoals 'Europa / Parijs‘.

Er zijn 2 implementaties van ZoneId. Ten eerste met een vaste offset in vergelijking met GMT / UTC. En ten tweede, als een geografische regio, die een reeks regels heeft om de offset met GMT / UTC te berekenen.

Laten we een ZoneId voor Berlijn, Duitsland:

ZoneId zone = ZoneId.of ("Europa / Berlijn");

2.2. ZoneOffset

ZoneOffset strekt zich uit ZoneId endefinieertde vaste offset van de huidige tijdzone met GMT / UTC, zoals +02: 00.

Dit betekent dat dit aantal vaste uren en minuten vertegenwoordigt, wat het verschil vertegenwoordigt tussen de tijd in de huidige tijdzone en GMT / UTC:

LocalDateTime nu = LocalDateTime.now (); ZoneId zone = ZoneId.of ("Europa / Berlijn"); ZoneOffset zoneOffSet = zone.getRules (). GetOffset (nu);

In het geval dat een land 2 verschillende offsets heeft - in zomer en winter zijn er 2 verschillende ZoneOffset implementaties voor dezelfde regio, vandaar de noodzaak om een LocalDateTime.

3. Datum Tijd Klassen

Laten we er vervolgens een paar bespreken Datum Tijd klassen, die echt profiteren van ZoneId en ZoneOffset.

3.1. ZonedDateTime

ZonedDateTime is een onveranderlijke weergave van een datum-tijd met een tijdzone in het ISO-8601 kalendersysteem, zoals 2007-12-03T10: 15: 30 + 01: 00 Europa / Paris. EEN ZonedDateTime bezit staat gelijk aan drie afzonderlijke objecten, een LocalDateTime, een ZoneId en het opgelost ZoneOffset.

Deze klasse slaat alle datum- en tijdvelden op, met een nauwkeurigheid van nanoseconden, en een tijdzone, met een ZoneOffset, om dubbelzinnige lokale datum-tijden af ​​te handelen. Bijvoorbeeld, ZonedDateTime kan de waarde “2 oktober 2007 om 13: 45.30.123456789 +02: 00 in de tijdzone Europa / Parijs” opslaan.

Laten we de stroom halen ZonedDateTime voor de vorige regio:

ZoneId zone = ZoneId.of ("Europa / Berlijn"); ZonedDateTime date = ZonedDateTime.now (zone);

ZonedDateTime ook biedt ingebouwde functies om een ​​bepaalde datum van de ene tijdzone naar de andere te converteren:

ZonedDateTime destDate = sourceDate.withZoneSameInstant (destZoneId);

3.2. OffsetDateTime

OffsetDateTime is een onveranderlijke weergave van een datum-tijd met een offset in het ISO-8601 kalendersysteem, zoals 2007-12-03T10: 15: 30 + 01: 00.

Deze klasse slaat alle datum- en tijdvelden op, tot op nanoseconden nauwkeurig, evenals de offset ten opzichte van GMT / UTC. Bijvoorbeeld,OffsetDateTime kan de waarde “2 oktober 2007 om 13: 45.30.123456789 +02: 00” opslaan.

Laten we de stroom halen OffsetDateTime met 2 uur offset ten opzichte van GMT / UTC:

ZoneOffset zoneOffSet = ZoneOffset.of ("+ 02:00"); OffsetDateTime date = OffsetDateTime.now (zoneOffSet);

3.3. OffsetTime

OffsetTime is een onveranderlijk datum-tijdobject dat een tijd vertegenwoordigt, vaak gezien als uur-minuut-seconde-offset, in het ISO-8601 kalendersysteem, zoals 10:15:30+01:00.

Deze klasse slaat alle tijdvelden op, met een nauwkeurigheid van nanoseconden, evenals een zoneverschuiving. Bijvoorbeeld, OffsetTime kan de waarde “13: 45.30.123456789 + 02: 00” opslaan.

Laten we de stroom halenOffsetTimemet 2 uur offset:

ZoneOffset zoneOffSet = ZoneOffset.of ("+ 02:00"); OffsetTime tijd = OffsetTime.now (zoneOffSet);

4. Conclusie

Terugkomend op het brandpunt, ZoneOffset is een weergave van de tijdzone in termen van het verschil tussen GMT / UTC en de opgegeven tijd. Dit is een handige manier om de tijdzone weer te geven, hoewel er ook andere weergaven beschikbaar zijn.

Bovendien, ZoneId en ZoneOffset worden niet alleen onafhankelijk gebruikt, maar ook door bepaalde Datum Tijd Java-klassen zoals ZonedDateTime, OffsetDateTime, en OffsetTime.

Zoals gewoonlijk is de code beschikbaar in onze GitHub-repository.


$config[zx-auto] not found$config[zx-overlay] not found