環境
Ubuntu20.4
内容
タイムゾーンを設定する場合、日本であれば、'Asia/Tokyo'の値をセットします。仮に、シンガポールであれば、'Asia/Singapore'の値をセットすることになります。この値はどこを調べればわかるかと言えば、次のコマンドで調べることができます。
$tzselect
大陸の一覧が表示されるため、ウィザードに従って番号をうって進めて行くと、設定したい国の値を調べることができます。
日本を調べると、次のように表示されます。
You can make this change permanent for yourself by appending the line
TZ='Asia/Tokyo'; export TZ
to the file '.profile' in your home directory; then log out and log in again.
Here is that TZ value again, this time on standard output so that you
can use the /usr/bin/tzselect command in shell scripts:
Asia/Tokyo
メッセージにある通り、日本のタイムゾーン(つまりJST)を設定するには、TZという環境変数に、'Asia/Tokyo'の値を設定することになります。
ただし、コマンドラインから次のコマンドをうっても、次回OSを起動したときは、この値はクリアされてしまうため、OS起動時に、毎回自動でコマンドが実行されるよう、.profileに記述します。
TZ='Asia/Tokyo'; export TZ
.profileに記述することが推奨されているようですが、.bashrcに記述しても問題ありません。.profileの中身を見ると分かりますが、.profileの中から、.bashrcが実行されています。
タイムゾーンの値は環境変数で設定してもいいが、次のコマンドで設定することもできます。基本的にどちらかになります。
$timedatectl set-timezone Asia/Tokyo
設定したタイムゾーンの内容を確認するコマンドが次です。Asia/Tokyoで設定した場合、次のコマンドをうつと、 Time zone: Asia/Tokyo (JST, +0900) と表示されます。
$timedatectl
環境変数で設定する場合と、timedatectlコマンドで設定する場合とでは、どっちで設定する方がいいのかと言えば、正直、お好きなやり方でどうぞということになるかと思います。言わずもがなではありますが、環境変数で設定した場合、ログインしたユーザーにしか反映されないことにはなります。
RubyでTimeクラスや、Dataクラスを使ってシステム日付を取得した場合、タイムゾーンで設定されている日付(時間)が取得されることになります。
環境変数とtimedatectlの両方に値がセットされていれば、どちらの値が優先されるのかといえば、環境変数の値の方が優先されることになります。
環境変数とtimedatectl共にタイムゾーンの設定がされていない場合は、UTC(世界標準時)が取得されます。環境変数TZはデフォルトでは値が設定されておらず、timedatectlには、デフォルトでUTCが設定されているためです。