Kako postaviti vremensku zonu JVM

1. Pregled

Korisnici naših aplikacija mogu biti zahtjevni što se tiče vremenskih žigova. Očekuju da će naše aplikacije automatski otkriti svoje vremenske zone i prikazati vremenske oznake u ispravnoj vremenskoj zoni.

U ovom ćemo uputstvu pogledati nekoliko načina na koje možemo izmijeniti vremensku zonu JVM-a. Također ćemo naučiti neke zamke povezane s upravljanjem vremenskom zonom.

2. Uvod u vremensku zonu

Prema zadanim postavkama, JVM čita podatke o vremenskoj zoni iz operativnog sustava. Te se informacije prosljeđuju Vremenska zona klase koja pohranjuje vremensku zonu i izračunava ljetno računanje vremena.

Možemo nazvati metodu getDefault, koji će vratiti vremensku zonu u kojoj se program izvodi. Nadalje, iz aplikacije možemo dobiti popis podržanih ID-ova vremenske zone TimeZone.getAvailableIDs ().

Pri imenovanju vremenske zone Java se oslanja na konvenciju imenovanja baza podataka tz.

3. Promjena vremenske zone

U ovom ćemo odjeljku pogledati nekoliko načina na koje možemo promijeniti vremensku zonu u JVM-u.

3.1. Postavljanje varijable okoline

Počnimo s time da vidimo kako možemo koristiti varijablu okoline za promjenu vremenske zone. Možemo dodati ili izmijeniti varijablu okoline TZ.

Na primjer, u okruženjima zasnovanim na Linuxu možemo koristiti izvoz naredba:

izvoz TZ = "Amerika / Sao_Paulo"

Nakon postavljanja varijable okruženja, možemo vidjeti da je vremenska zona naše pokrenute aplikacije sada Amerika / Sao_Paulo:

Kalendar kalendara = Calendar.getInstance (); assertEquals (calendar.getTimeZone (), TimeZone.getTimeZone ("America / Sao_Paulo"));

3.2. Postavljanje JVM argumenta

Alternativa postavljanju varijable okoline je postavljanje JVM argumenta korisnik.vremenska zona. Ovaj JVM argument ima prednost nad varijablom okoline TZ.

Na primjer, možemo koristiti zastavu -D kada pokrenemo našu aplikaciju:

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

Isto tako, iz aplikacije možemo postaviti i JVM argument:

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

Sada možemo vidjeti da je vremenska zona Azija / Kolkata:

Kalendar kalendara = Calendar.getInstance (); assertEquals (calendar.getTimeZone (), TimeZone.getTimeZone ("Azija / Kolkata"));

3.3. Postavljanje vremenske zone iz aplikacije

Napokon, također možemo iz aplikacije izmijeniti vremensku zonu JVM-a pomoću Vremenska zona razred. Ovaj pristup ima prednost i nad varijablom okoline i nad argumentom JVM.

Postavljanje zadane vremenske zone je jednostavno:

TimeZone.setDefault (TimeZone.getTimeZone ("Portugal"));

Očekivano, vremenska zona je sada Portugal:

Kalendar kalendara = Calendar.getInstance (); assertEquals (calendar.getTimeZone (), TimeZone.getTimeZone ("Portugal"));

4. Zamke

4.1. Korištenje troslovnih ID-ova vremenske zone

Iako je moguće koristiti troslovne ID-ove za predstavljanje vremenske zone, to se ne preporučuje.

Umjesto toga, trebali bismo koristiti dulja imena, jer su troslovni ID-ovi dvosmisleni. Na primjer, IST može biti ili indijsko standardno vrijeme, irsko standardno vrijeme ili izraelsko standardno vrijeme.

4.2. Globalne postavke

Imajte na umu da svaki od gore navedenih pristupa postavlja globalnu vremensku zonu za cijelu aplikaciju. No u modernim aplikacijama postavljanje vremenske zone često je nijansiranije od toga.

Na primjer, vjerojatno trebamo prevesti vrijeme u vremensku zonu krajnjeg korisnika, pa globalna vremenska zona ne bi imala puno smisla. Ako globalna vremenska zona nije potrebna, razmislite o određivanju vremenske zone izravno na svakoj instanci datuma i vremena. Ili ZonedDateTime ili OffsetDateTime je zgodan tečaj za ovo.

5. Zaključak

U ovom smo uputstvu objasnili nekoliko načina za izmjenu vremenske zone JVM-a. Vidjeli smo da možemo ili postaviti sistemsku varijablu okruženja, promijeniti JVM argument ili ga programski izmijeniti iz naše aplikacije.

Kao i obično, svi primjeri korišteni u ovom članku dostupni su na GitHubu.


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