Rozdiely medzi ZonedDateTime a OffsetDateTime

1. Prehľad

ZonedDateTime a OffsetDateTime sú veľmi populárne triedy v prostredí Java 8 Dátum Čas API. Ďalej oba ukladajú okamih na časovej osi až s presnosťou nanosekúnd. A spočiatku môže byť mätúce vyberať medzi nimi.

V tomto rýchlom návode sa pozrieme na rozdiely medzi nimi ZonedDateTime a OffsetDateTime.

2. ZonedDateTime

A ZonedDateTime je nemenná reprezentácia dátumu a času s časovým pásmom v kalendárnom systéme ISO-8601, ako napr 2007-12-03T10: 15: 30 + 01: 00 Európa / Paris. Drží stav ekvivalentný trom samostatným objektom: a LocalDateTime, a ZoneId, a vyriešené ZoneOffset.

Tu je ZoneId určuje, ako a kedy sa offset zmení. Ofset teda nemožno voľne nastaviť, pretože zóna určuje, ktoré ofsety sú platné.

Ak chcete získať prúd ZonedDateTime pre konkrétny región použijeme:

ZoneId zóna = ZoneId.of ("Európa / Berlín"); ZonedDateTime zonedDateTime = ZonedDateTime.now (zóna);

The ZonedDateTime trieda tiež poskytuje vstavané metódy na prevod daného dátumu z jednej časovej zóny na druhú:

ZonedDateTime destZonedDateTime = sourceZonedDateTime.withZoneSameInstant (destZoneId);

Nakoniec je plne si uvedomuje DST a zvláda úpravy letného času. Často sa to hodí, keď chceme zobraziť pole dátumu a času v konkrétnom časovom pásme.

3. OffsetDateTime

An OffsetDateTime je nemenná reprezentácia dátumu a času s posunom od UTC / Greenwich v kalendárnom systéme ISO-8601, ako napr. 2007-12-03T10: 15: 30 + 01: 00. Inými slovami, ukladá savšetky polia dátumu a času, s presnosťou na nanosekundy, ako aj posun od GMT / UTC.

Poďme na prúd OffsetDateTime s dvojhodinovým posunom od GMT / UTC:

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

4. Hlavné rozdiely

Po prvé, nemá zmysel (bez prepočtov) priame porovnanie dvoch dátumov s informáciami o úplnom časovom pásme. Preto mali by sme vždy uprednostňovať skladovanie OffsetDateTime v databáze nad ZonedDateTime, pretože dátumy s posunom miestneho času vždy predstavujú rovnaké časové okamihy.

Navyše, na rozdiel od ZonedDateTime, pridanie indexu nad stĺpec s uložením OffsetDateTime nezmení význam dátumu.

Poďme si rýchlo zhrnúť kľúčové rozdiely.

ZonedDateTime:

  • ukladá všetky polia dátumu a času s presnosťou na nanosekundy a časové pásmo s posunom zóny použitým na spracovanie nejednoznačných miestnych dátumov a časov
  • nie je možné voľne nastavovať vyrovnania, pretože zóna riadi platné hodnoty posunu
  • je plne informovaný o DST a spracováva úpravy letného času
  • hodí sa na zobrazovanie polí dátumu a času v časovom pásme konkrétnom pre používateľa

OffsetDateTime:

  • ukladá všetky polia dátumu a času s presnosťou na nanosekundy, ako aj posun od GMT / UTC (žiadne informácie o časovom pásme)
  • by sa mali používať na ukladanie dátumu do databázy alebo na komunikáciu po sieti

5. Záver

V tomto tutoriáli sme sa venovali rozdielom medzi ZonedDateTime a OffsetDateTime.

Celý zdrojový kód je ako obvykle k dispozícii na serveri Github.


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