Condividi tramite


Configurare i fusi orari in Java

È possibile configurare i fusi orari in Java tramite vari metodi, consentendo alle applicazioni di operare nel contesto di fuso orario desiderato. Due approcci comuni riguardano l'impostazione della variabile di ambiente TZ e la specifica della proprietà JVM -Duser.timezone. Questo articolo offre una breve panoramica di entrambi i metodi.

Impostazione della variabile di ambiente TZ

La variabile di ambiente TZ è un modo standard per impostare il fuso orario per le applicazioni in esecuzione in sistemi operativi simili a Unix. Quando si imposta questa variabile, la macchina virtuale Java (JVM) preleva l'impostazione del fuso orario durante l'avvio.

Impostare la variabile di ambiente TZ a livello di sistema operativo

Usare la procedura seguente per impostare la variabile di ambiente TZ a livello di sistema operativo:

  1. Identificare il fuso orario desiderato. I fusi orari vengono in genere specificati nel formato "Area/Posizione", ad esempio "America/New_York" o "Europe/London".

  2. Impostare la variabile di ambiente TZ usando uno dei metodi seguenti:

    • Nei sistemi Unix/Linux usare il comando seguente per impostare la variabile nel terminale o nel file di configurazione della shell , .bashrc, .bash_profile, .zshrce così via:

      export TZ=America/New_York
      
    • Nei sistemi Windows usare il comando seguente per impostare la variabile nel prompt dei comandi o tramite le impostazioni dell'ambiente di sistema:

      set TZ=America/New_York
      
  3. Riavviare l'applicazione in modo che JVM possa selezionare la nuova impostazione del fuso orario.

Esempio

Nell'esempio seguente l'applicazione myapp.jar viene eseguita nel fuso orario Europe/London:

export TZ=Europe/London
java -jar myapp.jar

Impostazione della variabile di ambiente TZ in un Dockerfile

Quando si eseguono applicazioni Java in contenitori, è possibile impostare la variabile di ambiente TZ all'interno del Dockerfile per assicurarsi che il contenitore venga eseguito nel fuso orario desiderato.

Esempio di Dockerfile

L'esempio seguente configura il contenitore per l'uso del fuso orario America/New_York impostando la variabile di ambiente TZ e installando il pacchetto tzdata:

# Use a base image with Java installed
FROM mcr.microsoft.com/openjdk/jdk:21-mariner

# Set the timezone environment variable
ENV TZ=America/New_York

# Set the working directory
WORKDIR /app

# Copy the application JAR file to the container
COPY myapp.jar /app/myapp.jar

# Run the application
CMD ["java", "-jar", "myapp.jar"]

Impostazione della proprietà JVM -Duser.timezone

Un altro metodo per configurare il fuso orario in Java consiste nel specificare la proprietà -Duser.timezone all'avvio della JVM. Questo metodo è indipendente dalla piattaforma e abilita l'impostazione del fuso orario direttamente dalla riga di comando o negli script dell'applicazione. Questa proprietà JVM ha la precedenza sulla variabile di ambiente TZ.

Per impostare la proprietà -Duser.timezone, seguire questa procedura:

  1. Identificare il fuso orario desiderato. Analogamente alla variabile di ambiente TZ, il fuso orario viene specificato nel formato "Area/Posizione".

  2. Impostare la proprietà -Duser.timezone aggiungendola alla riga di comando Java all'avvio dell'applicazione, come illustrato nell'esempio seguente:

    java -Duser.timezone=America/New_York -jar myapp.jar
    

Esempio

Nell'esempio seguente l'applicazione myapp.jar viene eseguita nel fuso orario Asia/Tokyo:

java -Duser.timezone=Asia/Tokyo -jar myapp.jar

Altri sistemi e ambienti

È possibile applicare i principi di configurazione dei fusi orari in Java usando la variabile di ambiente TZ e la proprietà -Duser.timezone JVM ad altri sistemi e ambienti. Sia che si eseguano applicazioni su piattaforme cloud, all'interno di macchine virtuali (VM) o in vari sistemi di orchestrazione dei contenitori, è possibile usare gli stessi metodi per garantire che le applicazioni Java funzionino nel contesto di fuso orario corretto.

Nelle piattaforme cloud configurare la variabile di ambiente TZ o la proprietà JVM all'interno degli script di distribuzione o delle impostazioni di configurazione dell'ambiente.

Nelle macchine virtuali impostare la variabile di ambiente TZ nell'ambiente della macchina virtuale o usare la proprietà JVM negli script di avvio dell'applicazione.

Con l'orchestrazione dei contenitori, usare l'esempio Dockerfile per le applicazioni in contenitori, assicurando che i dati del fuso orario siano disponibili e impostati correttamente.

Seguendo questi principi, è possibile ottenere una configurazione coerente del fuso orario in diversi ambienti di distribuzione per le applicazioni Java.