Configurar fusos horários em Java
Você pode configurar fusos horários em Java através de vários métodos, permitindo que os aplicativos operem no contexto de fuso horário desejado. Duas abordagens comuns são definir a variável de ambiente TZ
e especificar a propriedade JVM -Duser.timezone
. Este artigo fornece uma breve visão geral de ambos os métodos.
Definindo a variável de ambiente TZ
A variável de ambiente TZ
é uma maneira padrão de definir o fuso horário para aplicativos executados em sistemas operacionais Unix-like. Quando você define essa variável, a Java Virtual Machine (JVM) pega a configuração de fuso horário durante a inicialização.
Definir a variável de ambiente TZ no nível do SO
Use as seguintes etapas para definir a variável de ambiente TZ
no nível do sistema operacional:
Identifique o fuso horário desejado. Os fusos horários são normalmente especificados no formato "Área/Local", como "América/New_York" ou "Europa/Londres".
Defina a variável de ambiente
TZ
usando um dos seguintes métodos:Em sistemas Unix/Linux, use o seguinte comando para definir a variável no terminal ou no arquivo de configuração do shell -
.bashrc
,.bash_profile
,.zshrc
e assim por diante:export TZ=America/New_York
Em sistemas Windows, use o seguinte comando para definir a variável no prompt de comando ou por meio das configurações do ambiente do sistema:
set TZ=America/New_York
Reinicie o aplicativo para que a JVM possa pegar a nova configuração de fuso horário.
Exemplo
No exemplo a seguir, o aplicativo myapp.jar é executado no fuso horário Europe/London
:
export TZ=Europe/London
java -jar myapp.jar
Definindo a variável de ambiente TZ em um Dockerfile
Ao executar aplicativos Java em contêineres, você pode definir a variável de ambiente TZ
dentro do Dockerfile para garantir que o contêiner seja executado no fuso horário desejado.
Exemplo de Dockerfile
O exemplo a seguir configura o contêiner para usar o fuso horário America/New_York
definindo a variável de ambiente TZ
e instalando o pacote 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"]
Definindo a propriedade JVM -Duser.timezone
Outro método para configurar o fuso horário em Java é especificar a propriedade -Duser.timezone
ao iniciar a JVM. Esse método é independente da plataforma e permite definir o fuso horário diretamente da linha de comando ou dentro de scripts de aplicativo. Essa propriedade JVM tem precedência sobre a variável de ambiente TZ
.
Use as seguintes etapas para definir a propriedade -Duser.timezone
:
Identifique o fuso horário desejado. Semelhante à variável de ambiente
TZ
, o fuso horário é especificado no formato "Área/Local".Defina a propriedade
-Duser.timezone
adicionando-a à linha de comando Java ao iniciar o aplicativo, conforme mostrado no exemplo a seguir:java -Duser.timezone=America/New_York -jar myapp.jar
Exemplo
No exemplo a seguir, o aplicativo myapp.jar é executado no fuso horário Asia/Tokyo
:
java -Duser.timezone=Asia/Tokyo -jar myapp.jar
Outros sistemas e ambientes
Você pode aplicar os princípios de configuração de fusos horários em Java usando a variável de ambiente TZ
e a propriedade JVM -Duser.timezone
a outros sistemas e ambientes. Quer execute aplicações em plataformas na nuvem, em máquinas virtuais (VMs) ou em vários sistemas de orquestração de contentores, pode utilizar os mesmos métodos para garantir que as suas aplicações Java operam no contexto de fuso horário correto.
Em plataformas de nuvem, configure a variável de ambiente TZ
ou a propriedade JVM em seus scripts de implantação ou definições de configuração de ambiente.
Em máquinas virtuais, defina a variável de ambiente TZ
no ambiente da VM ou use a propriedade JVM nos scripts de inicialização do aplicativo.
Com a orquestração de contêineres, use o exemplo Dockerfile para aplicativos em contêineres, garantindo que os dados de fuso horário estejam disponíveis e definidos corretamente.
Seguindo esses princípios, você pode obter uma configuração consistente de fuso horário em diferentes ambientes de implementação para seus aplicativos Java.