サーバーのログの時刻が、日本の時刻と9時間ずれてる
時計が狂ってるんかな
【疑問】サーバーの時刻が9時間ずれて見える。/etc/localtime・/usr/share/zoneinfo・TZ と tzselect、timedatectl【LPICレベル1】
前提のおさらい。ロケールは LANG や LC_* で言語や表示のしかたを決める。タイムゾーンはそれとは別の設定で、時刻をどの地域の時間で表示するか
>>1
時計は合ってて、タイムゾーンが UTC になってるだけのことが多い。日本時間(JST)は UTC より9時間進んでる
UTC で6時なら
で、日本では15時
>>3
システムのタイムゾーンはどこで決まってるん
>>4
/etc/localtime。中身は /usr/share/zoneinfo の下にあるタイムゾーンのデータ
試したマシンでは /etc/localtime -> /usr/share/zoneinfo/Asia/Tokyo のシンボリックリンクで、file コマンドで見ると timezone data のバイナリやった
>>5
Debian にはもう1つ /etc/timezone があって、Asia/Tokyo みたいに名前が文字で書いてある。Red Hat 系にはない
>>5
変えるときは?
>>7
systemd のシステムなら timedatectl set-timezone Asia/Tokyo。/etc/localtime のリンクを張り替えてくれる。名前の一覧は timedatectl list-timezones
手でやるなら ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime。Debian なら dpkg-reconfigure tzdata でも選べる
試したマシンは systemd が動いてないから、timedatectl は使われへんかった。設定も変えてない
自分のシェルだけ別の国の時間で見たい
>>9
環境変数 TZ。TZ=America/New_York date ならそのコマンドだけ、~/.profile に export TZ='Asia/Tokyo' を書けば自分のログインのたびに効く
TZ はシステムの /etc/localtime より優先される
>>10date +'%Z %z' で名前とずれを試した
Asia/Tokyo:JST +0900
UTC:UTC +0000
Europe/London:GMT +0000(夏の間は BST +0100)
America/New_York:夏時間の間は EDT -0400、それ以外は EST -0500
>>11
存在しない TZ=Nowhere/Fake を入れたら、エラーも出ずに +0000 として扱われた。綴りを間違えても気付きにくい
>>11TZ=JST-9 って書き方も見たけど、マイナスで +9 時間?
>>13
POSIX の書き方で「略称 と UTC との差」。符号は逆で、JST-9 は UTC+9。試したら JST +0900 になった。普段は Asia/Tokyo のような地域の名前を使うほうが、夏時間も自動で扱えて安全
tzselect ってのは?
>>15
大陸と国を番号で選んでいくと、TZ に入れる値を教えてくれる対話式のコマンド。Asia(5)、Japan を選んだら TZ='Asia/Tokyo' will be used. と出て、最後に Asia/Tokyo を標準出力に出した
端末で使うと、~/.profile に export TZ='Asia/Tokyo' を足せばずっと使えるって案内も出る(スクリプトの中身で確認)。システムの設定は変えない
>>8
ハードウェアの時計とか NTP は、また別の話?
>>17
別。タイムゾーンは表示のしかたで、時計そのものが合ってるかは NTP の話。ハードウェアクロックを UTC で持つか地方時で持つかも別の設定(timedatectl set-local-rtc)
>>10
システムは /etc/localtime(zoneinfo へのリンク)、Debian は /etc/timezone も、自分だけなら TZ、値を調べるのは tzselect、変えるのは timedatectl set-timezone。9時間は UTC やったか
管理人のひとこと
- システムのタイムゾーンは /etc/localtime(/usr/share/zoneinfo/地域/都市 へのリンクかコピー)。Debian は /etc/timezone にも名前を書く。
- 変更は
timedatectl set-timezone Asia/Tokyo(一覧は list-timezones)、または ln -sf で /etc/localtime を張り替える。Debian は dpkg-reconfigure tzdata も使える。 - 環境変数 TZ はユーザーやコマンドごとに /etc/localtime より優先される(
TZ=UTC date、~/.profile にexport TZ='Asia/Tokyo')。存在しない名前でもエラーにならず UTC 扱い。POSIX 形式 JST-9 は符号が逆で UTC+9。 - tzselect は対話式で TZ に入れる値を表示するだけで、設定は変えない。JST は UTC+9。