PC の時刻は NTP サーバーと同期を取っているはずなのですが、Windows PC の場合それでも少しずれてしまいます。
自分の PC の時刻がどの程度ずれているかは以下のページで確認できます。
私の場合は 0.2 秒ほどずれている状態でした。
または以下のコマンドで確認できます。
> w32tm /monitor /computers:ntp.nict.jp
今回とある Web サービスとの連携で、出来れば誤差を数十ミリ秒くらいまでにしたかったので、精度をあげる方法はないかと調べてみました。
Windows Time サービスの起動
私の場合、そもそも時刻同期を行う Windows Time サービス (w32time) が起動していませんでした。
起動するには、まず Windows キー + R
を押して services.msc
を入力してサービス画面を起動します。Windows Time
を右クリックして「開始」を押せば w32time サービスが開始されます。
とりあえずはこれだけで正確に時刻同期されました。
尚、私の場合、この Windows Time
のスタートアップの種類が「手動」になっていたので、「自動(遅延開始)」に変更しました。
w32time の設定
NTP サーバーの変更
コマンドプロンプトで以下を実行することで現在の設定を確認できます。
> w32tm /query /status
私の場合、以下のように表示されました。
閏インジケーター: 3 (同期未実行)
階層: 0 (未指定)
精度: -23 (ティックごとに 119.209ns)
ルート遅延: 0.0000000s
ルート分散: 0.0000000s
参照 ID: 0x00000000 (未指定)
最終正常同期時刻: 未指定
ソース: Local CMOS Clock
ポーリング間隔: 10 (1024s)
ソースが Local CMOS Clock
となっており、これは内蔵時計だそうなので、これを ntp.nict.jp
に変更します。
コマンドプロンプトを管理者権限で起動して、以下のコマンドを実行します。
> w32tm /config /syncfromflags:manual /manualpeerlist:ntp.nict.jp /update
> w32tm /resync
> w32tm /query /status
これで NTP サーバーと同期されます。
尚、時刻はいきなり補正されるのではなく、少しずつ補正されていきます。
ポーリング間隔の設定
w32time サービスを起動していてもしばらく経つとまた時刻はずれてきます。 この場合、時刻同期の間隔を短くしたら改善されます。
この設定については、以下のページが参考になりました。
どうやらレジストリを変更しないといけないようですね。