Java でタイムゾーンを構成する
Java でさまざまな方法を通してタイムゾーンを構成することで、アプリケーションを目的のタイムゾーン コンテキストで動作させることができます。 一般的な 2 つのアプローチは、TZ
環境変数の設定と JVM プロパティ -Duser.timezone
の指定です。 この記事では、両方の方法を手短に説明します。
TZ 環境変数の設定
TZ
環境変数は、Unix ライクなオペレーティング システム上で実行されているアプリケーションのタイムゾーンを設定するための標準的な方法です。 この変数を設定すると、Java 仮想マシン (JVM) は起動時にそのタイムゾーン設定を取得します。
OS レベルで TZ 環境変数を設定する
オペレーティング システム レベルで TZ
環境変数を設定するには、以下の手順を使用します。
目的のタイムゾーンを特定します。 タイムゾーンは通常、"America/New_York" や "Europe/London" などの "地域/場所" という形式で指定されます。
以下のいずれかの方法を使用して、
TZ
環境変数を設定します。Unix/Linux システムでは、次のコマンドを使用して、ターミナルまたはシェル構成ファイル (
.bashrc
、.bash_profile
、.zshrc
など) 内で変数を設定します。export TZ=America/New_York
Windows システムでは、次のコマンドを使用して、コマンド プロンプト内またはシステム環境設定を通して変数を設定します。
set TZ=America/New_York
JVM が新しいタイムゾーン設定を取得できるように、アプリケーションを再起動します。
例
次の例において、アプリケーション myapp.jar は Europe/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
プロパティを指定することです。 この方法はプラットフォーム非依存であり、コマンドラインから直接、またはアプリケーション スクリプト内でタイムゾーンを設定することを可能にします。
-Duser.timezone
プロパティを設定するには、以下の手順を使用します。
目的のタイムゾーンを特定します。
TZ
環境変数と同様に、タイムゾーンは "地域/場所" という形式で指定されます。次の例に示すように、アプリケーションの起動時に
-Duser.timezone
プロパティを Java コマンド ラインに追加することで、これを設定します。java -Duser.timezone=America/New_York -jar myapp.jar
例
次の例では、アプリケーション myapp.jar は Asia/Tokyo
タイムゾーン内で実行されます。
java -Duser.timezone=Asia/Tokyo -jar myapp.jar
その他のシステムと環境
TZ
環境変数と -Duser.timezone
JVM プロパティを使用する Java でのタイムゾーンの構成の原則は、他のシステムや環境に適用できます。 クラウド プラットフォーム上、仮想マシン (VM) 内、さまざまなコンテナー オーケストレーション システム内のいずれでアプリケーションを実行していようと、同じ方法を使用して、Java アプリケーションを正しいタイムゾーン コンテキストで動作させることができます。
クラウド プラットフォームでは、デプロイ スクリプトまたは環境構成設定内で TZ
環境変数または JVM プロパティを構成します。
仮想マシンでは、VM の環境内の TZ
環境変数を設定するか、アプリケーションの起動スクリプト内で JVM プロパティを使用します。
コンテナー オーケストレーションでは、コンテナー化されたアプリケーション用の Dockerfile 例を使用して、タイムゾーン データが利用可能で正しく設定されているこを確認します。
これらの原則に従うことで、Java アプリケーションのさまざまなデプロイ環境で一貫したタイムゾーン構成を実現できます。