次の方法で共有


Java でタイムゾーンを構成する

Java でタイムゾーンを構成するには、さまざまな方法を使用して、アプリケーションを目的のタイムゾーンコンテキストで動作させることができます。 2 つの一般的な方法は、TZ 環境変数を設定し、JVM プロパティ -Duser.timezoneを指定することです。 この記事では、両方の方法の概要について説明します。

TZ 環境変数の設定

TZ 環境変数は、Unix に似たオペレーティング システムで実行されているアプリケーションのタイムゾーンを設定する標準的な方法です。 この変数を設定すると、Java 仮想マシン (JVM) は起動時にタイムゾーン設定を取得します。

OS レベルで 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.jarEurope/London タイムゾーンで実行されます。

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

Dockerfile での TZ 環境変数の設定

コンテナーで Java アプリケーションを実行する場合は、Dockerfile 内で TZ 環境変数を設定して、コンテナーが目的のタイムゾーンで確実に実行されるようにすることができます。

Dockerfile の例

次の例では、TZ 環境変数を設定し、tzdata パッケージをインストールすることで、America/New_York タイムゾーンを使用するようにコンテナーを構成します。

# 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 でタイムゾーンを構成するもう 1 つの方法は、JVM の起動時に -Duser.timezone プロパティを指定することです。 このメソッドはプラットフォームに依存せず、コマンドラインから直接、またはアプリケーション スクリプト内でタイムゾーンを設定できます。 この JVM プロパティは、環境変数 TZよりも優先されます。

-Duser.timezone プロパティを設定するには、次の手順に従います。

  1. 目的のタイムゾーンを特定します。 TZ 環境変数と同様に、タイムゾーンは "Area/Location" 形式で指定されます。

  2. 次の例に示すように、アプリケーションの起動時に Java コマンド ラインに追加して、-Duser.timezone プロパティを設定します。

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

次の例では、アプリケーション myapp.jarAsia/Tokyo タイムゾーンで実行されます。

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

その他のシステムと環境

TZ 環境変数と -Duser.timezone JVM プロパティを使用して、Java でタイムゾーンを構成する原則を他のシステムや環境に適用できます。 クラウド プラットフォーム、仮想マシン (VM)、またはさまざまなコンテナー オーケストレーション システムでアプリケーションを実行する場合でも、同じ方法を使用して、Java アプリケーションが正しいタイムゾーン コンテキストで動作することを確認できます。

クラウド プラットフォームでは、デプロイ スクリプトまたは環境構成設定内で TZ 環境変数または JVM プロパティを構成します。

仮想マシンで、VM の環境で TZ 環境変数を設定するか、アプリケーションのスタートアップ スクリプトで JVM プロパティを使用します。

コンテナー オーケストレーションでは、コンテナー化されたアプリケーションに対して Dockerfile の例を使用して、タイムゾーン データが使用可能で正しく設定されていることを確認します。

これらの原則に従うことで、Java アプリケーションのさまざまなデプロイ環境で一貫したタイムゾーン構成を実現できます。