Поделиться через


Настройка часовых поясов в Java

Вы можете настроить часовой пояс в Java с помощью различных методов, позволяя приложениям работать в нужном контексте часового пояса. Два распространенных подхода — установка переменной TZ среды и указание свойства -Duser.timezoneJVM. В этой статье представлен краткий обзор обоих методов.

Настройка переменной среды TZ

Переменная TZ среды — это стандартный способ задать часовой пояс для приложений, работающих в операционных системах, таких как Unix. При настройке этой переменной виртуальная машина Java (JVM) выбирает параметр часового пояса во время запуска.

Установка переменной среды TZ на уровне ОС

Чтобы задать TZ переменную среды на уровне операционной системы, выполните следующие действия.

  1. Определите нужный часовой пояс. Часовые пояса обычно указываются в формате "Область/расположение", например "Америка/New_York" или "Европа/Лондон".

  2. TZ Задайте переменную среды с помощью одного из следующих методов:

    • В системах Unix/Linux используйте следующую команду, чтобы задать переменную в терминале или в файле конфигурации оболочки : .bashrc, и .bash_profile.zshrcт. д.

      export TZ=America/New_York
      
    • В системах Windows используйте следующую команду, чтобы задать переменную в командной строке или с помощью системных параметров среды:

      set TZ=America/New_York
      
  3. Перезапустите приложение, чтобы JVM смог выбрать новый параметр часового пояса.

Пример

В следующем примере приложение myapp.jar выполняется в часовом поясе Europe/London :

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

Задание переменной среды TZ в Dockerfile

При запуске приложений Java в контейнерах можно задать TZ переменную среды в Dockerfile, чтобы убедиться, что контейнер выполняется в нужном часовом поясе.

Пример Dockerfile

В следующем примере контейнер настраивается для использования часового America/New_York пояса, задав TZ переменную среды и установив 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"]

Задание свойства JVM -Duser.timezone

Другим способом настройки часового пояса в Java является указание -Duser.timezone свойства при запуске JVM. Этот метод является независимым от платформы и включает настройку часового пояса непосредственно из командной строки или в скриптах приложения.

Чтобы задать -Duser.timezone свойство, выполните следующие действия.

  1. Определите нужный часовой пояс. Аналогично переменной TZ среды, часовой пояс указывается в формате "Область или расположение".

  2. -Duser.timezone Задайте свойство, добавив его в командную строку Java при запуске приложения, как показано в следующем примере:

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

Пример

В следующем примере приложение myapp.jar выполняется в часовом поясе Asia/Tokyo :

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

Другие системы и среды

Принципы настройки часовых поясов в Java можно применять с помощью TZ переменной среды и -Duser.timezone свойства JVM к другим системам и средам. Независимо от того, запущены ли приложения на облачных платформах, в виртуальных машинах или в различных системах оркестрации контейнеров, можно использовать те же методы, чтобы обеспечить работу приложений Java в правильном контексте часового пояса.

На облачных платформах настройте TZ переменную среды или свойство JVM в сценариях развертывания или параметрах конфигурации среды.

На виртуальных машинах задайте TZ переменную среды в среде виртуальной машины или используйте свойство JVM в скриптах запуска приложения.

С оркестрацией контейнеров используйте пример Dockerfile для контейнерных приложений, обеспечивая доступность и правильное определение данных часового пояса.

Следуя этим принципам, вы можете достичь согласованной конфигурации часового пояса в разных средах развертывания для приложений Java.