TZ環境変数とは

dateコマンドはシステムに設定されたタイムゾーンで日時を表示する。

システム全体のタイムゾーンを変更せずに、コマンド実行時だけ別のタイムゾーンで日時を確認したい場合はTZ環境変数を使用する。

コマンド実行時だけタイムゾーンを変更する

コマンドの前にTZ=タイムゾーンを付けると、そのコマンドの実行時だけタイムゾーンを変更できる。

$ date
Sun Jul 12 10:55:30 UTC 2026

$ TZ="Asia/Tokyo" date
Sun Jul 12 19:55:30 JST 2026

$ TZ="America/New_York" date
Sun Jul 12 06:55:30 EDT 2026

システムのタイムゾーン設定自体は変更されないため、TZを付けずに実行すると元のタイムゾーンで表示される。

$ date
Sun Jul 12 10:55:30 UTC 2026

シェルのセッション中はexportで有効にする

同じシェルのセッション内で繰り返し別のタイムゾーンを使いたい場合は、exportTZを環境変数として設定する。

$ export TZ="Asia/Kolkata"
$ date
Sun Jul 12 16:25:30 IST 2026

セッション中はTZが有効なままなので、以降のdateコマンドはすべて指定したタイムゾーンで表示される。

元のタイムゾーンに戻すにはunsetTZを削除する。

$ unset TZ
$ date
Sun Jul 12 10:55:30 UTC 2026

date -dと組み合わせる

TZ-dオプションで日時を指定する場合にも有効。基準となる日時のタイムゾーンを変換した結果を表示できる。

$ TZ="Asia/Tokyo" date -d "2025-01-01 00:00:00 UTC"
Wed Jan  1 09:00:00 JST 2025

複数のタイムゾーンをまとめて確認する

シェルスクリプトでループさせると、複数のタイムゾーンの現在時刻を一覧できる。

$ for tz in "Asia/Tokyo" "America/Los_Angeles" "Europe/London" "UTC"; do
    printf "%-20s %s\n" "$tz" "$(TZ=$tz date +"%Y-%m-%d %H:%M:%S %Z")"
  done
Asia/Tokyo           2026-07-12 19:55:30 JST
America/Los_Angeles  2026-07-12 03:55:30 PDT
Europe/London        2026-07-12 11:55:30 BST
UTC                  2026-07-12 10:55:30 UTC

海外拠点とのミーティング調整や、UTCとJSTのログ突き合わせなどに活用できる。

Dockerコンテナに指定する

Dockerコンテナを起動する際に-eオプションでTZを指定すると、コンテナ内のdateコマンドの表示タイムゾーンを変更できる。

$ docker run --rm -e TZ="Asia/Tokyo" ubuntu:24.04 date
Sun Jul 12 20:03:46 JST 2026

TZを指定しない場合、コンテナ内はUTCがデフォルトのタイムゾーンとして扱われる。

$ docker run --rm ubuntu:24.04 date
Sun Jul 12 11:03:57 UTC 2026

ベースイメージにtzdataパッケージがインストールされていない場合、TZを指定してもタイムゾーン名やオフセットが正しく反映されない点に注意が必要である。

$ docker run --rm -e TZ="Asia/Tokyo" ubuntu:24.04 date
Sun Jul 12 11:04:15 Asia 2026

事前にtzdataパッケージをインストールしたイメージを使用するか、DockerfiletzdataをインストールしてからTZを指定する。

FROM ubuntu:24.04
RUN apt-get update && apt-get install -y tzdata
ENV TZ=Asia/Tokyo

タイムゾーン名の一覧を確認する

TZに指定できるタイムゾーン名は、timedatectl list-timezonesコマンドで確認できる。

【timedatectl】コマンドでタイムゾーンとシステムクロックを設定

POSIX形式のオフセットを指定する場合の注意点

TZにはタイムゾーン名の他に、UTC+9のようなPOSIX形式のオフセットも指定できる。ただし、POSIX形式では符号の意味がUTCからの時差と逆転する点に注意が必要である。

$ date
Sun Jul 12 10:55:30 UTC 2026

$ TZ="UTC+9" date
Sun Jul 12 01:55:30 UTC 2026

UTC+9はUTCより9時間進んだ時刻ではなく、UTCより9時間遅れた時刻(UTC-9相当)として扱われる。日本時間を意図する場合はUTC+9ではなくAsia/Tokyoのようなタイムゾーン名を指定する。

まとめ

TZ環境変数を使うと、システムのタイムゾーン設定を変更せずに任意のタイムゾーンで日時を確認できる。ワンショットでの指定とexportによるセッション単位での指定を使い分けると、ログ調査や海外拠点とのやり取りで効率的に日時を扱える。