タイムゾーンを変更する方法

Linuxタイムゾーンを変更するにはtzconfigとやらを使うと対話的に設定できるらしい。
というわけで、Ubuntuで試してみたらdeprecatedとか言われた。

$ sudo tzconfig
WARNING: the tzconfig command is deprecated, please use:
 dpkg-reconfigure tzdata

どうやらdpkg-reconfigure tzdataを使うらしい。
こっちも対話的に設定できる。


CentOSの場合はよくわからなかった。手動で設定するのかな。

実体は

タイムゾーンの設定ファイルというか実体は/etc/localtimeというバイナリファイル(tzfile)で、/usr/share/zoneinfo内のファイルへのシンボリックリンクだったり、そのままコピーしたものになっている。
/usr/share/zoneinfoには各地域に対応するファイルがたくさん詰まっているので、この中から目的のもので/usr/localtimeを置き換えればよい。
ちなみにJapanとAsia/Tokyoは同じ模様。


Ubuntuの場合はdpkg-reconfigure tzdataが/etc/timezoneも参照するので、こちらも併せて変更しておく。
こっちは単なるテキストファイルで中にAsia/Tokyoとか書いてある。

システムクロックとハードウェアクロック

タイムゾーンを変更すると、表示は変わったけど時間がずれる、という場合がある。
それはたぶんタイムゾーンを変更したことでローカルタイムの解釈にずれが生じたということなので、hwclockで設定し直せばよいっぽい。


ハードウェアクロックがローカルタイムなのかUTCなのかは環境にもよると思うけど、Windowsはハードウェアクロックをローカルタイムで設定するので、過去にWindowsを使っていたとかマルチブートにしているPCではローカルで扱うのが無難。
CentOSの場合は/etc/sysconfig/clockにその辺の設定がある。インストール時にUTCにするかどうかみたいなチェックボックスがあったと思うが、あそこを間違えた場合はこのファイルを修正すればよい……かもしれないけどsystem-config-dateかtimeconfigを使うのが無難かも。
Ubuntuの場合は/etc/default/rcSあたりがそうなのかな?


というわけでこんな感じ?

sudo hwclock --localtime --hctosys

※hwclockは使い方を間違うと時間がめちゃくちゃになるので注意。


この辺の内容は@IT自分戦略研究所のLinux時刻管理の仕組みと設定が詳しい。
ハードウェアクロックとシステムクロックという二種類のものがあることは漠然と知っていても、具体的にどういう仕組みになっているのか知らない人におすすめ。勉強になる。