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:
Identificare il fuso orario desiderato. I fusi orari vengono in genere specificati nel formato "Area/Posizione", ad esempio "America/New_York" o "Europe/London".
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
,.zshrc
e 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
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:
Identificare il fuso orario desiderato. Analogamente alla variabile di ambiente
TZ
, il fuso orario viene specificato nel formato "Area/Posizione".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.