Verschillen tussen ZonedDateTime en OffsetDateTime

1. Overzicht

ZonedDateTime en OffsetDateTime zijn behoorlijk populaire klassen in de Java 8 Datum Tijd API. Verder beide slaan een moment op de tijdlijn op met een nauwkeurigheid van nanoseconden. En in het begin kan het verwarrend worden om tussen beide te kiezen.

In deze korte tutorial gaan we kijken naar de verschillen tussen ZonedDateTime en OffsetDateTime.

2. ZonedDateTime

EEN 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. Het heeft een staat die gelijk is aan drie afzonderlijke objecten: a LocalDateTime, een ZoneId, en het opgelost ZoneOffset.

Hier de ZoneId bepaalt hoe en wanneer de offset verandert. De offset kan dus niet vrij worden ingesteld, omdat de zone bepaalt welke offsets geldig zijn.

Om de stroom te krijgen ZonedDateTime voor een specifieke regio gebruiken we:

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

De ZonedDateTime class biedt ook ingebouwde methoden voor het converteren van een bepaalde datum van de ene tijdzone naar de andere:

ZonedDateTime destZonedDateTime = sourceZonedDateTime.withZoneSameInstant (destZoneId);

Eindelijk is het volledig DST-bewust en verwerkt zomertijdaanpassingen. Het is vaak handig wanneer we een datum-tijdveld in een specifieke tijdzone willen weergeven.

3. OffsetDateTime

Een OffsetDateTime is een onveranderlijke weergave van een datum-tijd met een afwijking van UTC / Greenwich in het ISO-8601 kalendersysteem, zoals 2007-12-03T10: 15: 30 + 01: 00. Met andere woorden, het slaat opalle datum- en tijdvelden, tot op nanoseconden nauwkeurig, evenals de offset ten opzichte van GMT / UTC.

Laten we de stroom bekijken OffsetDateTime met een verschil van twee uur ten opzichte van GMT / UTC:

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

4. De belangrijkste verschillen

Ten eerste heeft het geen zin (zonder conversies) om twee datums rechtstreeks te vergelijken met volledige tijdzonegegevens. Daarom we zouden altijd de voorkeur moeten geven aan opslag OffsetDateTime in de database via de ZonedDateTime, aangezien datums met een lokale tijdverschuiving altijd dezelfde tijdstippen vertegenwoordigen.

Bovendien, in tegenstelling tot de ZonedDateTime, door een index toe te voegen over een kolom waarin de OffsetDateTime zal de betekenis van de datum niet veranderen.

Laten we snel de belangrijkste verschillen samenvatten.

ZonedDateTime:

  • slaat alle datum- en tijdvelden op, met een nauwkeurigheid van nanoseconden, en een tijdzone, met een zoneverschuiving die wordt gebruikt om dubbelzinnige lokale datum-tijden te verwerken
  • kan niet vrijelijk offsets instellen, aangezien de zone de geldige offsetwaarden beheert
  • is volledig DST-bewust en verwerkt zomertijdaanpassingen
  • is handig voor het weergeven van datum-tijdvelden in een gebruikersspecifieke tijdzone

OffsetDateTime:

  • slaat alle datum- en tijdvelden op, met een nauwkeurigheid van nanoseconden, evenals de offset ten opzichte van GMT / UTC (geen tijdzone-informatie)
  • moet worden gebruikt voor het opslaan van een datum in de database of voor communicatie via een netwerk

5. Conclusie

In deze zelfstudie hebben we de verschillen tussen de ZonedDateTime en de OffsetDateTime.

Zoals gewoonlijk is de volledige broncode beschikbaar op Github.


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