Ubuntuを使っていて、「ローカル時間がずれている」「自動で合わない」「特定の日時に一時的に戻したい」といった状況に出くわすことがあります。
たとえば仮想環境やテスト用サーバーでは、意図的に日付を操作したい場合もあるでしょう。
この記事では、インターネットによる時刻合わせ(NTP)を使わずに、ローカル時間を手動で変更する手順を、注意点も含めてわかりやすく説明します。
現在の時間の状態を確認する
まずは、現在の時間の状態を確認します。以下のように打ち込んでください。
timedatectl
このコマンドを実行すると、以下のような情報が表示されます。
Local time: 火 2025-05-26 11:59:24 JST
Universal time: 火 2025-05-26 02:59:24 UTC
RTC time: 水 2025-05-27 00:00:04
Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: no
NTP service: inactive
RTC in local TZ: yes
ここで注目するのは、Local time(ローカル時間)とRTC time(基板の時刻)です。
今回、変更したいのはこのLocal timeです。
NTP(時刻合わせ機能)が無効でも時間が変わらない場合
あなたの環境でも、以下のようにNTP機能が無効になっているかもしれません。
sudo systemctl status systemd-timesyncd
出力が次のようであれば、自動の時刻合わせは働いていません。
Active: inactive (dead)
それにも関わらず、以下のようにコマンドで日時を変更しても反映されないことがあります。
sudo timedatectl set-time '2025-05-27 00:00:00'
このような状況では、RTC timeだけが変わり、Local timeが変わらないという事象が発生します。
正しくローカル時間を変更する方法
この現象は、RTCの設定やハードウェア時計との連携に原因があります。
以下の手順を踏むことで、正しくローカル時間を変更できます。
RTCにローカル時間を使わないように設定
まずはハードウェア時計を世界標準時(UTC)として扱うようにします。
sudo timedatectl set-local-rtc 0
これにより、「RTC in local TZ」が「no」になります。これはローカル時間と基板時計を一致させる設定をやめることを意味します。
ローカル時間の設定を再度行う
次に、希望する日時に設定します。
sudo timedatectl set-time '2023-09-27 00:00:00'
設定が反映されたか確認する
再び以下のコマンドで確認してください。
timedatectl
ここで「Local time」が期待通りの日付になっていれば、成功です。
なぜRTCの設定が影響するのか?
多くのLinux系のシステムでは、ハードウェアの時計(RTC)をUTCとして扱うことが前提になっています。
しかし、Windowsなど他のOSと共存する環境や、意図的にRTCをローカル時間として設定したシステムでは、時刻がずれることがあります。
今回のケースでは、「RTC in local TZ」が「yes」になっていたため、RTCの値が優先されて、timedatectl set-time で設定したローカル時間が反映されませんでした。
これを明示的に無効にすることで、ローカル時間の変更が可能になりました。
まとめ
Ubuntuでローカル時間を手動で変更するためには、単に時刻を設定するだけでは不十分な場合があります。
特に、以下の点に注意が必要です。
- RTC(基板時計)をローカル時間として使っているかどうかを確認する
- RTCをUTCとして扱う設定に変更することで、ローカル時間が自由に変更可能になる
- NTPサービスが停止しているか確認する(自動同期されていないか)
これらを踏まえたうえで、timedatectlを正しく使えば、意図した時間の設定が可能です。
ローカル時間の調整は、仮想マシンの時刻ずれの検証や、旧システムの移行検証などにも非常に重要です。
自動同期に頼らず、意図的に時間を変えたいときには、ぜひ本記事の手順を参考にしてください。


コメント