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.