Pretvaranje Java datuma u OffsetDateTime
1. Uvod
U ovom uputstvu saznajemo o razlici između Datum i OffsetDateTime. Također učimo kako pretvoriti iz jednog u drugoga.
2. Razlika između Datum i OffsetDateTime
OffsetDateTime je predstavljen u JDK 8 kao moderna alternativa za java.util.Datum.
OffsetDateTime je klasa sigurna u nitima koja pohranjuje datum i vrijeme s preciznošću u nanosekunde. Datum, s druge strane, nije siguran u nitima i pohranjuje vrijeme do milisekundne preciznosti.
OffsetDateTime je klasa zasnovana na vrijednosti, što znači da je trebamo koristiti jednako pri usporedbi referenci umjesto tipičnog ==.
Izlaz od OffsetDateTime‘S toString metoda je u formatu ISO-8601, dok Datum‘S toString je u prilagođenom nestandardnom formatu.
Nazovimo toString u oba razreda kako biste vidjeli razliku:
Datum: Sub Okt 19 17:12:30 2019 OffsetDateTime: 2019-10-19T17: 12: 30.174Z
Datum ne mogu pohraniti vremenske zone i odgovarajuće pomake. Jedino što a Datum objekt sadrži broj milisekundi od 1. siječnja 1970. godine, 00:00:00 UTC, pa ako naše vrijeme nije u UTC, trebali bismo vremensku zonu pohraniti u pomoćnu klasu. Baš suprotno, OffsetDateTime pohranjuje ZoneOffset iznutra.
3. Pretvaranje Datum do OffsetDateTime
Pretvaranje Datum do OffsetDateTime je prilično jednostavno. Ako je naša Datum je u UTC, možemo ga pretvoriti s jednim izrazom:
Datum datuma = novi datum (); OffsetDateTime offsetDateTime = date.toInstant () .atOffset (ZoneOffset.UTC);
Ako original Datum nije u UTC-u, možemo pružiti pomak (pohranjen u pomoćnom objektu, jer kao što je ranije spomenuto, klasa Date ne može pohraniti vremenske zone).
Recimo naš original Datum je +3: 30 (teheransko vrijeme):
int sat = 3; int minuta = 30; offsetDateTime = date.toInstant () .atOffset (ZoneOffset.ofHoursMinutes (sat, minuta));
OffsetDateTime pruža mnoge korisne metode koje se mogu koristiti nakon toga. Na primjer, možemo jednostavno getDayOfWeek (), getDayOfMonth (), i getDayOfYear (). Također je vrlo lako usporediti dva OffsetDateTime objekta s jeNakon i jePrije metode.
Iznad svega, dobra je praksa izbjegavati zastarjele Datum razred u cijelosti.
4. Zaključak
U ovom uputstvu naučili smo kako je jednostavno pretvoriti iz Datum do OffsetDateTime.
I kao i uvijek, kôd je dostupan na Githubu.