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.