共用方式為


在 Java 中設定時區

您可以透過各種方法在 Java 中設定時區,讓應用程式能夠在所需的時區內容中運作。 兩個常見的方法是設定 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.jar 會在 Europe/London 時區中執行:

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

在 Dockerfile 中設定 TZ 環境變數

當您在容器中執行 Java 應用程式時,您可以在 Dockerfile 中設定 TZ 環境變數,以確保容器在所需的時區中執行。

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 中設定時區的方法,是在啟動 JVM 時指定 -Duser.timezone 屬性。 此方法與平台無關,並可直接從命令行或在應用程式腳本內設定時區。 此 JVM 屬性的優先順序高於環境變數 TZ

使用下列步驟來設定 -Duser.timezone 屬性:

  1. 識別所需的時區。 類似於 TZ 環境變數,時區是以「區域/位置」格式指定。

  2. 啟動應用程式時,將屬性新增至 Java 命令行,以設定 -Duser.timezone 屬性,如下列範例所示:

    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應用程式,跨不同的部署環境實現一致的時區設定。