WindowsマシンにDebianやUbuntuをインストールしてデュアルブートにした場合、時刻に9時間のズレが生じます。これは、Windows側のシステム時刻(OSが管理している時刻)がLocal Time(ローカル時)、Linux側がUTC(協定世界時)に設定されているために起こります。
これを修正するには、どちらかのシステム時刻の設定方針に合わせなければならなりません。Windows側の設定をLinux側に合わせようとすると、Winodws側のレジストリを修正しなければならなくなるので、設定変更はLinux側で行う方が簡単です。
以前は、Linuxのディストロ毎にシステム時刻の変更方法に微妙な違いがありましたが、最近のLinuxディストロでは、hwclockコマンドによる設定変更にほぼ統一されつつあります。
時刻の確認とUTCからLocal Timeへの切り替え
先ずは現在のハードウェアクロック(BIOSで設定される時計)の時刻とその設定内容(ローカル時かUTCかなど)を確認するため、ターミナル上で、次のコマンドを打ち込んでください。
sudo hwclock --verbose
Linux Mint 18.2(Ubuntu 16.04 LTSベース)でのコマンド実行結果は次のとおり。
実行結果に「ハードウェアの時刻はUTCです」という文言があることからも分かるとおり、このPCのハードウェアクロックは、UTCに設定されています。
ということは、現在のシステム時刻は、ハードウェアクロックに協定世界時とローカル時の差をプラスしたものが表示されていることになります。
日本のローカル時は、協定世界時にプラス9時間されたものですから、現在のハードウェアクロックには、日本時間からマイナス9時間されたものが入っているということが、これで分かりました。
そこで、ハードウェアクロックに現在のシステム時刻はローカル時だということを教えるために、次のコマンドを打ち込みます。
sudo hwclock --verbose --systohc --localtime
オプション –systohcは、set the SYStem time TO the Hardware Clockの略で、システム時刻を、ローカル時としてハードウェアクロックにセットしなさいと指示していることになります。
Local TimeからUTCへの切り替え
反対にローカル時からUTCへ戻したい場合は、次のようになります。
sudo hwclock --verbose --systohc --utc
その他のオプション
hwclockコマンドにオプション –showを付与して実行した場合は、dateコマンドを実行したときと同じく、日時のみの表示となります。
sudo hwclock --show
ただし、dateコマンドで表示されるのはシステム時刻であるのに対して、hwclockはその名のとおり、ハードウェアクロック(HardWare CLOCK)に設定されている時刻となります。
また、hwclockコマンドには、オプション –systohcとは反対の働きを指示する、–hctosysというオプションもあります。これは、set the Hardware Clock TO SYStem timeの略、つまり、ハードウェアクロックの時刻をシステム時刻としてセットしなさいという意味です。
【追 記】20211112
この記事が書かれた当初に使っていた-Dオプションはすでに完全廃止となっていたので、–verbose (-vでも可)に書き換えました。
【追 記】20191214
この記事で使われている-Dオプションは、Ubuntsu 18.04 LTSの標準インストールされているhwclockのバージョン2.31.1などでは、まだ使用可能ですが、Manjaro Linux 18.1.4に標準インストールされているバージョン2.34ではすでに廃止されています。-Dオプションの代わりに-v又は–verboseを使うよう推奨されています。