Forskelle mellem ZonedDateTime og OffsetDateTime

1. Oversigt

ZonedDateTime og OffsetDateTime er temmelig populære klasser i Java 8 Dato tid API. Desuden, begge gemmer et øjeblik på tidslinjen op til en nøjagtighed på nanosekunder. Og i starten kan det blive forvirrende at vælge imellem dem.

I denne hurtige vejledning skal vi se på forskellene mellem ZonedDateTime og OffsetDateTime.

2. ZonedDateTime

EN ZonedDateTime er en uforanderlig gengivelse af en dato-tid med en tidszone i ISO-8601 kalendersystemet, f.eks 2007-12-03T10: 15: 30 + 01: 00 Europa / Paris. Det har tilstand svarende til tre separate objekter: a LocalDateTime, a ZoneIdog løst ZoneOffset.

Her, den ZoneId bestemmer, hvordan og hvornår forskydningen ændres. Så forskydningen kan ikke indstilles frit, da zonen styrer, hvilke forskydninger der er gyldige.

For at få den aktuelle ZonedDateTime for en bestemt region bruger vi:

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

Det ZonedDateTime klasse giver også indbyggede metoder til konvertering af en given dato fra en tidszone til en anden:

ZonedDateTime destZonedDateTime = sourceZonedDateTime.withZoneSameInstant (destZoneId);

Endelig er det fuldt DST-opmærksom og håndterer sommertid. Det er ofte nyttigt, når vi vil vise et datofeltfelt i en bestemt tidszone.

3. OffsetDateTime

En OffsetDateTime er en uforanderlig gengivelse af et dato-tidspunkt med en forskydning fra UTC / Greenwich i ISO-8601-kalendersystemet, såsom 2007-12-03T10: 15: 30 + 01: 00. Med andre ord, det gemmeralle dato- og tidsfelter med en nøjagtighed på nanosekunder såvel som forskydningen fra GMT / UTC.

Lad os få strømmen OffsetDateTime med en to timers forskydning fra GMT / UTC:

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

4. De vigtigste forskelle

For det første giver det ikke mening (uden konverteringer) at sammenligne to datoer direkte med information om fuld tidszone. Derfor, vi foretrækker altid opbevaring OffsetDateTime i databasen over ZonedDateTime, da datoer med en lokal tidsforskydning altid repræsenterer de samme øjeblikke i tiden.

Desuden i modsætning til ZonedDateTime, tilføjer et indeks over en kolonne, der gemmer OffsetDateTime ændrer ikke betydningen af ​​datoen.

Lad os hurtigt opsummere de vigtigste forskelle.

ZonedDateTime:

  • gemmer alle dato- og tidsfelter med en nøjagtighed på nanosekunder og en tidszone, med en zone-offset, der bruges til at håndtere tvetydige lokale dato-tider
  • kan ikke frit indstille forskydninger, da zonen styrer de gyldige forskydningsværdier
  • er fuldstændig DST-opmærksom og håndterer justeringer af dagslysbesparelser
  • er praktisk til visning af datofelter i en brugerspecifik tidszone

OffsetDateTime:

  • gemmer alle dato- og tidsfelter med en nøjagtighed på nanosekunder samt forskydningen fra GMT / UTC (ingen tidszoneinformation)
  • skal bruges til lagring af en dato i databasen eller kommunikation over et netværk

5. Konklusion

I denne vejledning dækkede vi forskellene mellem ZonedDateTime og OffsetDateTime.

Som sædvanlig er den komplette kildekode tilgængelig på Github.


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