Programming Field

Tzutil - DOS/コマンドプロンプト コマンド一覧

[Windows Vista? 以降] 現在のユーザーに対するタイムゾーン設定の表示および変更を行います。

なお、タイムゾーンの変更にはタイムゾーンの変更権限(SeTimeZonePrivilege)が必要です。既定では一般ユーザー(Usersグループ)にも権限が付与されています。

構文

3つのオプション(+ それに伴う引数)のうちいずれかを指定します。/? を指定、または何も指定しない場合はコマンドラインのヘルプが表示されます。

tzutil[.exe] /g | /s <time-zone-id>[_dstoff] | /l
/g
現在のタイムゾーン設定を出力します。
/s
現在のタイムゾーン設定を変更します。<time-zone-id> に変更先のタイムゾーン設定の名前を指定します。タイムゾーン設定の名前は「/l」で出力される名前を利用します(大文字・小文字は問われません)。
また、夏時間(サマータイム)による時刻調整を行わないようにする場合は、タイムゾーン設定の名前の末尾に「_dstoff」(アンダーバー含む)をつなげて指定します。(夏時間を用いないタイムゾーン設定の場合は無視されます。)
※ tz databaseにある名前を設定の名前として用いることは出来ません。また、「UTC-xx」「UTC+xx」といった形式は一部の時差でしか利用できません。
※ タイムゾーン設定の名前にスペースを含む場合は、「_dstoff」部も含めて全体をダブルクオーテーション「" "」で括って指定する必要があります。
/l (l は小文字の L、大文字も可)
システムで利用可能なタイムゾーン設定の一覧を、UTCから見て最もマイナス方向に時差が大きいタイムゾーンから最もプラス方向に時差が大きいタイムゾーンの順に出力します。

解説

Tzutil はコマンドラインからタイムゾーンの設定を変更する際に用います。タイムゾーン設定は頻繁に変更するものではありませんが、コンピューターの初期設定の一環でバッチファイルに tzutil の呼び出しを含めるなど、設定を自動化したいときに利用することができます。

Tzutil はコマンド実行完了時に終了コードを返します。0 である場合は正常終了したことを、それ以外の場合はパラメーター誤りなど何かしら問題があったことを示します。(何も引数を指定しなかった場合はコマンドラインのヘルプが表示されるとともに終了コードは 0 以外の値になりますが、「/?」を指定した場合は 0 になります。)

サンプル1

tzutil /s "Tokyo Standard Time"

タイムゾーン設定を日本標準時(UTC+09:00、設定名「大阪、札幌、東京」)に変更します。

サンプル2 (バッチファイル)

@echo off
setlocal enableextensions
for /F "delims=" %%A in ('tzutil /G') do set "TEMP_TZ=%%A"
tzutil /S UTC
rem -- 日付と時刻を整形
for /F "tokens=1,2,* delims=:" %%I in ("%TIME%") do set MYTIME=%%I%%J
set MYDATE=%DATE:/=%
set MYDATE=%MYDATE: =%
set UTC_DATE_TIME=%MYDATE%_%MYTIME%
endlocal & tzutil /S "%TEMP_TZ%" & set UTC_DATE_TIME=%UTC_DATE_TIME%

[拡張構文] 現在時刻をUTCで取得し、その日付と時刻(時分)を環境変数「UTC_DATE_TIME」に設定します。UTC時刻を得るために一旦 Tzutil を使ってタイムゾーン設定をUTCとし、日付と時刻を特殊な環境変数「DATE」および「TIME」経由で取得し整形して「UTC_DATE_TIME」に設定してから、再び Tzutil でタイムゾーン設定を元に戻しています。

このバッチファイルでは、現在のタイムゾーン設定を環境変数に入れるためにForコマンドを、一時的な環境変数とバッチファイル外に出す環境変数を作るためにSetlocalコマンドEndlocalコマンドおよび「&」文字を利用しています。

※ Tzutilでのタイムゾーン設定変更は、Setlocalでのローカル化の影響を受けないため、手動で戻す必要があります。また、このバッチファイル実行中に別操作でタイムゾーン設定が変更された場合は、タイミング次第で設定が上書きされる可能性があります(ただし設定変更自体は数秒もかからないのでほとんどの場合問題はありません)。