A JVM időzóna beállítása

1. Áttekintés

Alkalmazásaink felhasználói igényesek lehetnek az időbélyegekkel kapcsolatban. Arra számítanak, hogy alkalmazásaink automatikusan észlelik az időzónájukat, és az időbélyegeket a megfelelő időzónában jelenítik meg.

Ebben az oktatóanyagban megnézzük, hogyan módosíthatjuk a JVM időzónáját. Megismerjük az időzóna kezelésével kapcsolatos néhány buktatót is.

2. Bevezetés az időzónába

Alapértelmezés szerint a JVM beolvassa az időzóna információkat az operációs rendszerből. Ezeket az információkat továbbítják a Időzóna osztály, amely tárolja az időzónát és kiszámítja a nyári időszámítást.

Hívhatjuk a módszert getDefault, amely visszaadja az időzónát, ahol a program fut. Továbbá az alkalmazás segítségével megszerezhetjük a támogatott időzóna-azonosítók listáját TimeZone.getAvailableIDs ().

Az időzóna elnevezésekor a Java a tz adatbázis.

3. Az időzóna módosítása

Ebben a szakaszban megnézzük, hogyan változtathatjuk meg az időzónát a JVM-ben.

3.1. Környezeti változó beállítása

Kezdjük azzal, hogy lássuk, hogyan használhatunk környezeti változót az időzóna megváltoztatására. Hozzáadhatunk vagy módosíthatunk egy környezeti változót TZ.

Például Linux-alapú környezetekben használhatjuk a export parancs:

export TZ = "Amerika / Sao_Paulo"

A környezeti változó beállítása után láthatjuk, hogy futó alkalmazásunk időzónája most van Amerika / Sao_Paulo:

Naptár naptár = Calendar.getInstance (); assertEquals (calendar.getTimeZone (), TimeZone.getTimeZone ("Amerika / Sao_Paulo"));

3.2. JVM-argumentum beállítása

A környezeti változó beállításának alternatívája a JVM argumentum beállítása user.idezone. Ez a JVM argumentum elsőbbséget élvez a környezeti változóval szemben TZ.

Például használhatjuk a zászlót -D amikor futtatjuk az alkalmazásunkat:

java -Duser.timezone = "Asia / Kolkata" com.company.Main

Hasonlóképpen beállíthatjuk az alkalmazásból a JVM argumentumot is:

System.setProperty ("user.timezone", "Asia / Kolkata");

Most láthatjuk, hogy az időzóna Ázsia / Kolkata:

Naptár naptár = Calendar.getInstance (); assertEquals (calendar.getTimeZone (), TimeZone.getTimeZone ("Asia / Kolkata"));

3.3. Az időzóna beállítása az alkalmazásból

Végül a JVM időzónáját is módosíthatjuk az alkalmazásból a Időzóna osztály. Ez a megközelítés elsőbbséget élvez mind a környezeti változóval, mind a JVM argumentummal szemben.

Az alapértelmezett időzóna beállítása egyszerű:

TimeZone.setDefault (TimeZone.getTimeZone ("Portugália"));

Ahogy az várható volt, az időzóna most van Portugália:

Naptár naptár = Calendar.getInstance (); assertEquals (calendar.getTimeZone (), TimeZone.getTimeZone ("Portugália"));

4. Buktatók

4.1. Hárombetűs időzóna-azonosítók használata

Annak ellenére, hogy hárombetűs azonosítókat lehet használni az időzóna ábrázolására, ez nem ajánlott.

Ehelyett a hosszabb neveket kell használnunk, mivel a hárombetűs azonosítók nem egyértelműek. Például az IST lehet India standard idő, Ír standard idő vagy Izrael szokásos ideje.

4.2. Általános beállítások

Vegye figyelembe, hogy a fenti megközelítések mindegyike globálisan beállítja az időzónát a teljes alkalmazás számára. A modern alkalmazásokban az időzóna beállítása azonban ennél sokkal árnyaltabb.

Például valószínűleg le kell fordítanunk az időt a végfelhasználó időzónájára, és így egy globális időzónának nem lenne sok értelme. Ha nincs szükség globális időzónára, fontolja meg az időzóna közvetlen megadását az egyes dátum-idő példányokban. Bármelyik ZonedDateTime vagy OffsetDateTime egy praktikus osztály ehhez.

5. Következtetés

Ebben az oktatóanyagban számos módszert ismertettünk a JVM időzónájának módosítására. Láttuk, hogy beállíthatunk egy rendszerszintű környezeti változót, módosíthatunk egy JVM argumentumot, vagy programozottan módosíthatjuk az alkalmazásunkból.

Szokás szerint az ebben a cikkben használt összes példa elérhető a GitHubon.


$config[zx-auto] not found$config[zx-overlay] not found