Postavite vremensku zonu datuma na Javi

1. Pregled

U ovom brzom vodiču vidjet ćemo kako postaviti vremensku zonu datuma pomoću Java 7, Java 8 i Joda-Time knjižnice.

2. Korištenje Jave 8

Java 8 je predstavila novi Date-Time API za rad s datumima i vremenima koji se uglavnom temeljio na biblioteci Joda-Time.

The Trenutak klasa iz Java Date Time API modelira jednu trenutnu točku na vremenskoj traci u UTC. Ovo predstavlja broj nanosekundi od epohe prvog trenutka 1970 UTC.

Prvo ćemo dobiti struju Trenutak sa sistemskog sata i ZoneId za naziv vremenske zone:

Trenutno trenutnoUtc = Instant.now (); ZoneId asiaSingapore = ZoneId.of ("Azija / Singapur");

Napokon, ZoneId i Trenutak može se koristiti za stvaranje objekta datum-vrijeme s detaljima vremenske zone. The ZonedDateTime klasa predstavlja datum-vrijeme s vremenskom zonom u sustavu kalendara ISO-8601:

ZonedDateTime nowAsiaSingapore = ZonedDateTime.ofInstant (nowUtc, asiaSingapore);

Koristili smo Javu 8 ZonedDateTime za predstavljanje datuma i vremena s vremenskom zonom.

3. Korištenje Jave 7

U Javi 7 postavljanje vremenske zone pomalo je nezgodno. The Datum klasa (koja predstavlja određeni trenutak u vremenu) ne sadrži informacije o vremenskoj zoni.

Prvo, uzmimo trenutni UTC datum i a Vremenska zona objekt:

Date nowUtc = novi datum (); TimeZone asiaSingapore = TimeZone.getTimeZone (timeZone);

U Javi 7 moramo koristiti Kalendar klasa za predstavljanje datuma s vremenskom zonom.

Napokon, možemo stvoriti a nowUtc kalendar s azijaSingapur Vremenska zona i postavite vrijeme:

Kalendar nowAsiaSingapore = Calendar.getInstance (asiaSingapore); nowAsiaSingapore.setTime (nowUtc);

Preporučuje se izbjegavanje Java 7 datumskog API-ja u korist Java 8 datumskog API-ja ili Joda-Time knjižnice.

4. Korištenje Joda-Timea

Ako Java 8 nije opcija, još uvijek možemo dobiti isti takav rezultat od Joda-Timea, de-facto standard za operacije datuma i vremena u svijetu prije Java 8.

Prvo, moramo dodati ovisnost o Joda-vremenu pom.xml:

 joda-vrijeme joda-vrijeme 2.10 

Da bismo predstavili točnu točku na vremenskoj liniji koju možemo koristiti Trenutak iz org.joda.vrijeme paket. Interno, klasa sadrži jedan podatak, trenutak u milisekundama iz Java ere 1970-01-01T00: 00: 00Z:

Trenutno trenutnoUtc = Instant.now ();

Koristit ćemo DateTimeZone za predstavljanje vremenske zone (za navedeni ID vremenske zone):

DateTimeZone asiaSingapore = DateTimeZone.forID ("Azija / Singapur");

Sada sadaUtc vrijeme će se pretvoriti u Datum vrijeme objekt koji koristi podatke o vremenskoj zoni:

DateTime nowAsiaSingapore = nowUtc.toDateTime (asiaSingapore);

Na ovaj se način Joda-time API može koristiti za kombiniranje podataka o datumu i vremenskoj zoni.

5. Zaključak

U ovom smo članku saznali kako postaviti vremensku zonu u Javi koristeći Java 7, 8 i Joda-Time API. Da biste saznali više o podršci za datum i vrijeme za Java 8, pogledajte uvod u datum i vrijeme za Java 8.

Kao i uvijek isječak koda dostupan je u spremištu GitHub.