タイムゾーンとは、国や地域ごとの標準時刻や時間帯のことだ。コンピュータやシステムには時間が大いに関係していて、重要なのはご存知の通りだ。
タイムゾーンとは?
時差により国や地域ごとによって時刻がことなることは容易に想像できると思う。コンピュータも時計を内蔵している限り、時差と無関係ではいられない。
日本はUTC(協定世界時)よりも9時間早い時刻が標準時刻となる。国や地域ごとの標準時刻、時間帯をさして「タイムゾーン」という。
日本は狭いため標準時刻は一つだが、国によっては地域ごとに標準時刻が違う国も存在する。
タイムゾーンの情報は「/usr/share/zoneinfo/」ディレクトリの下にバイナリファイルとして納められている。タイムゾーンは「UTC(協定世界時)プラスマイナス何時間なのか?」という情報ともいえる。
UTC(協定世界時)とは?
UTCとは「Universal Time Coordinated」の略であり、訳すと「協定世界時」と訳される。世界の共通標準時刻であり、セシウム原子時計によって刻まれる時刻を基準としている。
セシウム原子時計はこの世でもっとも正確な時刻を刻んでいる。1年のあいだに100万分の1秒未満の誤差である。それに加え地球の自転速度のゆらぎなども考慮し、調整したものがUTCとなる。調整手段としては「うるう秒」の挿入などがほどこされる。
時刻基準としてGMT「Greenwich Mean Time」グリニッチ標準時があがることもあるがGMTとUTCでは100年間で約18秒のズレが生じてしまう。
コンピュータの世界ではUTCの方がよく調整されており厳格なため、現代ではUTCを使用している。
タイムゾーンの設定
「/usr/share/zoneinfo/」ディレクトリのしたにあるゾーン情報ファイルを「/etc/localtime」としてコピーすることでタイムゾーンを設定できる。実態をコピーしてもよいが、シンボリックリンクをはっても同じ効能が得られる。
例えば日本の場合、
# cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
またはシンボリックリンクを貼る場合
# ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
また環境変数TZを設定することでタイムゾーンを指定することも可能だ。これは恒久的ではなく一時的な変更を行いたい場合に使用することが多いだろう。
シェルが標準のbashの場合
$ export TZ="Asia/Tokyo"
状態を確認するには「date」コマンドを叩く、日本の場合は「JST」と表示される。
$ date
CentOS7の場合
CentOS7では「timedatectl」というコマンドが存在するのでそちらで管理しよう。
「Asia/Tokyo」(JST)にタイムゾーンを指定する。
# timedatectl set-timezone Asia/Tokyo
状態を確認する。
# timedatectl status
上記を参照すると「Local time」が「JST」であり「Universal time」が「UTC」となっている。比較すると9時間ほどずれていることが確認できる。
また
# timedatectl list-timezones | grep Tokyo
などとすると、タイムゾーンのリストが得られる今回は「grep」で「Tokyo」と絞り込んだ。
まとめ
このページではLinuxでのタイムゾーンの確認や変更方法についてまとめてきた。
日本でシステムを扱うのであれば、「Asia/Tokyo」に設定しておけばまず問題ないだろう。インストール時に設定すべきものでもあるが、変更や引き継ぎでシステムを引き受けたとき、挙動がおかしければ疑ってみるといいだろう。
/etc/localetime (ロケール)ではなく /etc/localtime (ローカル)でした。
コメント頂きありがとうございます。
ご指摘の通り、locale→localとなります。該当箇所の記述を訂正いたしました。
引き続き、ご愛読のほど、よろしくお願いいたします。