Nastavte časové pásmo dátumu v Jave
1. Prehľad
V tomto rýchlom výučbe sa dozvieme, ako nastaviť časové pásmo dátumu pomocou jazyka Java 7, Java 8 a knižnice Joda-Time.
2. Používanie Java 8
Java 8 predstavila nové API Date-Time pre prácu s dátumami a časmi, ktoré bolo do veľkej miery založené na knižnici Joda-Time.
The Okamžité triedy z rozhrania Java Date Time API modeluje jediný okamžitý bod na časovej osi v UTC. To predstavuje počet nanosekúnd od epochy prvého okamihu roku 1970 UTC.
Najprv získame prúd Okamžité zo systémových hodín a ZoneId pre názov časového pásma:
Okamžité nowUtc = Instant.now (); ZoneId asiaSingapore = ZoneId.of ("Ázia / Singapur");
Nakoniec ZoneId a Okamžité možno využiť na vytvorenie objektu dátumu a času s podrobnosťami o časových pásmach. The ZonedDateTime trieda predstavuje dátum a čas s časovým pásmom v kalendárnom systéme ISO-8601:
ZonedDateTime nowAsiaSingapore = ZonedDateTime.ofInstant (nowUtc, asiaSingapore);
Použili sme Java 8 ZonedDateTime reprezentovať dátum a čas s časovým pásmom.
3. Používanie Java 7
V prostredí Java 7 je nastavenie časovej zóny trochu zložité. The Dátum trieda (ktorá predstavuje konkrétny okamih v čase) neobsahuje žiadne informácie o časovom pásme.
Najprv si dajme aktuálny dátum UTC a a Časové pásmo objekt:
Dátum nowUtc = nový Dátum (); TimeZone asiaSingapore = TimeZone.getTimeZone (timeZone);
V prostredí Java 7 musíme používať Kalendár triedy, ktorá predstavuje dátum s časovým pásmom.
Nakoniec môžeme vytvoriť a nowUtc kalendár s asiaSingapore TimeZone a nastavte čas:
Calendar nowAsiaSingapore = Calendar.getInstance (asiaSingapore); nowAsiaSingapore.setTime (nowUtc);
Odporúča sa vyhnúť sa rozhraniu API pre dátum a čas Java 7 v prospech rozhrania API pre dátum a čas Java 8 alebo knižnici Joda-Time.
4. Používanie Joda-Time
Ak Java 8 nie je možnosťou, stále môžeme získať rovnaký druh výsledku z Joda-Time, de facto štandard pre operácie dátumu a času vo svete pred Java 8.
Najprv musíme pridať závislosť Joda-Time pom.xml:
joda-time joda-time 2.10
Na reprezentáciu presného bodu na časovej osi môžeme použiť Okamžité od org.joda.čas balíček. Trieda interne uchováva jeden údaj, okamih ako milisekundy z obdobia Javy 1970-01-01T00: 00: 00Z:
Okamžité nowUtc = Instant.now ();
Použijeme DateTimeZone reprezentovať časové pásmo (pre zadané ID časového pásma):
DateTimeZone asiaSingapore = DateTimeZone.forID ("Ázia / Singapur");
Teraz nowUtc čas bude prevedený na a Dátum Čas objekt pomocou informácií o časovom pásme:
DateTime nowAsiaSingapore = nowUtc.toDateTime (asiaSingapore);
Takto je možné pomocou Joda-time API kombinovať informácie o dátume a časovom pásme.
5. Záver
V tomto článku sme zistili, ako nastaviť časové pásmo v Jave pomocou Java 7, 8 a Joda-Time API. Ak sa chcete dozvedieť viac informácií o podpore dátumu a času v Java 8, pozrite si naše úvodné informácie o dátume a čase v Java 8.
Útržok kódu je ako vždy k dispozícii v úložisku GitHub.