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.