2024-05-03

Windows の RTC を UTC にするという解決策

Linux と Windows をデュアルブートで切り替えて使っている人の永遠の悩みは「時計がずれる」ということではないでしょうか。

いきなり解決策

Linux は「RTC は UTC である」という前提で動いていて、一方の Windows は「RTC は Local である」という前提で動いているために時計がずれるのです。

どちらかをどちらかの考え方に寄せない限りは解決しないのですが、今までは Linux 側は変更できるけど Windows 側は変更できないので Linux 側を変えるしかない、と思っていたのですが、なんと Windows 側も変えられるようになっていることに気づきました。

レジストリに RealTimeIsUniversal というキーを追加してあげるという方法です。

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation\RealTimeIsUniversal = 1

参考にしたサイトはこちらです。

WindowsのハードウェアクロックをUTCで管理する 

 

 

これまでは

Linux 側で変更するのですが、まずは標準状態です。「RTC in local TZ: no」が RTC は UTC ということを示しています。

$ timedatectl status
               Local time: 金 2024-05-03 09:35:46 JST
           Universal time: 金 2024-05-03 00:35:46 UTC
                 RTC time: 金 2024-05-03 00:35:46
                Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

RTC を Local time に変えるには以下のコマンドを発行します。

$ timedatectl set-local-rtc 1

 

Linux 側の推奨としては RTC は UTC の方が良い、ということで UTC のまま使っていました。

普段は Linux しか使っていなくて、Windows を起動するのは在宅勤務の時くらいなんですが、ほぼやめていた在宅勤務を最近は週に 1 回ほどするようになったので、Windows を起動する機会が増えたのです。

Windows にも NTP を使った時刻の自動調整機能は備わっているのですが、初回の時刻合わせをするまでに時間がかかってしまい、今では Windows が起動したら手動で時刻合わせをするのが定形手順となっていたのでした。

時計がずれていると「艦これ」がエラーで起動しないんですもん。
(おい、在宅勤務中に何をやってるんだ)

 

そんな面倒な手順をなんとかしたいと思い、やはり Linux 側で RTC の取り扱いを Local time に変えるしかないかとあきらめていた所、Windows 側を変える方法を発見してニコニコしているところです。