正確な現在時刻 — 日本標準時(JST)
K-TIMESは、情報通信研究機構(NICT)が管理する日本標準時を基準に、現在時刻をミリ秒単位で表示します。
表示している時刻がどの程度正確なのかも、「±○ms」という形で同時に表示しています。
お使いの端末の時計はずれています
PCやスマートフォンの時計は水晶振動子で動いており、放置すれば1日あたり数十ミリ秒から数秒ずれます。
OSの時刻同期は数十分から数日に一度しか行われないため、その合間に溜まったずれはそのまま残ります。数秒ずれている端末は珍しくありません。
K-TIMESでは、端末の時計をそのまま使うことはありません。
サーバーとの通信にかかった時間を測定し、その結果をもとに補正することで、端末の時計がずれていても正しい時刻を表示できるようにしています。
日本標準時を基準にしています
K-TIMESでは、NICTのStratum 1サーバーを基準に時刻を同期しています。
そのため、表示する時刻は日本標準時を基準としたものになっています。
うるう秒については、時刻を徐々にずらすsmear方式ではなく、UTCに合わせてそのまま処理しています。
「±○ms」について
時刻の下に表示されている「±○ms」は、その時点で考えられる誤差の上限です。実際のずれは、通常これよりも小さくなります。
サーバー自身の時刻の誤差に加えて、サーバーからお使いの端末までの通信による影響も考慮しています。
ページを開いたときには12回測定し、その中から通信時間が最も短かった結果を使用します。
通信状況によって余計な遅延が発生することがあるため、単純に平均を取るのではなく、遅延の小さい結果を使うことで、通信による影響をできるだけ小さくしています。
その後は5分ごとに測定し直し、その間も端末の時計の進み方を推定して補正を続けます。
時刻API
K-TIMESでは、現在時刻をJSON形式で取得できるAPIも公開しています。
認証は必要なく、ブラウザやプログラムから直接利用できます。
curl https://time-api.keitodaze.jp/v1/time
{
"t1": 1787501261841182,
"t2": 1787501261841262,
"uncertainty_us": 2249,
"stratum": 2,
"leap_policy": "step",
"sync": true
}
t1はサーバーがリクエストを受け取った時刻、t2はレスポンスを送り出した時刻です。どちらもUnix
epochからの経過時間をマイクロ秒単位で表しています。
クライアント側でリクエストの送信時刻と受信時刻を記録することで、通信にかかった時間を測定し、その結果を使ってサーバー時刻を補正できます。
uncertainty_usは、サーバー側で推定した時刻の不確かさをマイクロ秒単位で示します。
時刻同期が失われている場合はsyncがfalseになり、APIはHTTP 503を返します。
正確な時刻を提供できない状態で時刻を返すよりも、同期が確認できない場合は応答しないことを優先しています。