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.