Razlike između ZonedDateTime i OffsetDateTime

1. Pregled

ZonedDateTime i OffsetDateTime prilično su popularni satovi u Javi 8 Datum vrijeme API. Nadalje, obje pohranjuju trenutak na vremenskoj liniji do preciznosti nanosekundi. I u početku može biti zbunjujuće odabrati između njih.

U ovom ćemo brzom vodiču pogledati razlike između ZonedDateTime i OffsetDateTime.

2. ZonedDateTime

A ZonedDateTime je nepromjenjiv prikaz datuma i vremena s vremenskom zonom u sustavu kalendara ISO-8601, kao što je 2007-12-03T10: 15: 30 + 01: 00 Europa / Paris. Sadrži stanje ekvivalentno trima odvojenim objektima: a LocalDateTime, a ZoneId, i riješen ZoneOffset.

Evo, ZoneId određuje kako i kada se pomak mijenja. Dakle, pomak se ne može slobodno postaviti, jer zona kontrolira koja su odstupanja valjana.

Da biste dobili struju ZonedDateTime za određenu regiju koristit ćemo:

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

The ZonedDateTime klasa također nudi ugrađene metode za pretvaranje određenog datuma iz jedne vremenske zone u drugu:

ZonedDateTime destZonedDateTime = sourceZonedDateTime.withZoneSameInstant (destZoneId);

Napokon je potpuno svjestan DST-a i rukuje prilagodbama ljetnog i zimskog vremena. Često nam dobro dođe kada želimo prikazati polje za datum i vrijeme u određenoj vremenskoj zoni.

3. OffsetDateTime

An OffsetDateTime je nepromjenjiv prikaz datuma i vremena sa odmakom od UTC / Greenwicha u kalendarskom sustavu ISO-8601, kao što je 2007-12-03T10: 15: 30 + 01: 00. Drugim riječima, pohranjujesva polja datuma i vremena, s preciznošću u nanosekundama, kao i odmak od GMT / UTC.

Uzmimo struju OffsetDateTime s dvosatnim odmakom od GMT / UTC:

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

4. Glavne razlike

Prvo, nema smisla (bez pretvorbi) izravno uspoređivati ​​dva datuma s punim podacima o vremenskoj zoni. Stoga, uvijek bismo više voljeli skladištiti OffsetDateTime u bazi podataka preko ZonedDateTime, jer datumi s pomicanjem lokalnog vremena uvijek predstavljaju iste trenutke u vremenu.

Štoviše, za razliku od ZonedDateTime, dodajući indeks preko stupca koji pohranjuje OffsetDateTime neće promijeniti značenje datuma.

Sažmimo brzo ključne razlike.

ZonedDateTime:

  • pohranjuje sva polja datuma i vremena s preciznošću u nanosekunde i vremensku zonu, s pomakom zone koji se koristi za obradu dvosmislenih lokalnih datuma i vremena
  • ne može slobodno postavljati pomake, jer zona kontrolira važeće vrijednosti pomaka
  • potpuno je svjestan DST-a i bavi se prilagodbama dnevnog računanja vremena
  • dobro dolazi za prikaz polja datuma i vremena u korisničkoj vremenskoj zoni

OffsetDateTime:

  • pohranjuje sva polja datuma i vremena s preciznošću u nanosekunde, kao i odmak od GMT / UTC (bez podataka o vremenskoj zoni)
  • treba koristiti za pohranjivanje datuma u bazu podataka ili komunikaciju putem mreže

5. Zaključak

U ovom smo tutorijalu pokrili razlike između ZonedDateTime i OffsetDateTime.

Kao i obično, cjeloviti izvorni kod dostupan je na Githubu.


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