テスト環境などで、どうしてもネットワークから時刻が取得できない状況があり、そうはいっても PC 本体のクロックに依存すると標準時との誤差が分単位で出てしまうので、せめて数秒内の誤差で運用したいことがあります。ということで時刻サーバーを導入・・・といってもあれはうん十万するような代物なのでカジュアルには導入できません(汗
そこで GPS の USB ドングルであれば比較的安価に入手できるので、それを使って時刻を取得する方法を考えてみます。
今回は Vk-172 なる USB GPS ドングルが入手できたのでそれを使用して時刻を取得してみます。
USB ドングルを挿すと COM ポートとして認識するので、その COM ポートに teraterm などで接続すると 1 秒に一度テキストが送信されてきます。
流れてくるテキストのうち、先頭が $GPRMC のものに注目します。テキストは CSV 形式になっており 2 列目が時刻(UTC), 10列目が日付です。また 3 列目がステータスで有効(=A),警告(=V) などを表すようです。
$GPRMC,143116.00,V,,,,,,,110919,,,N*7C
これは NMEA フォーマットというらしく、フォーマットの詳細は https://www.hiramine.com/physicalcomputing/general/gps_nmeaformat.html などが詳しいのでそちらを参照してください。
このテキストを拾って時刻を取得,設定する Powershell Script が以下です。
https://gist.github.com/ooltcloud/c780872fbbe5248bb782ef9b0401e8d2
警告もお構いなしで、日付と時刻が受信出来たら即時刻設定、という凶悪(?)な仕様になっているので、ご使用の際は気を付けてください(汗