公開NTPサーバについてご説明します

info_page
公開NTP

NICT 公開 NTP サービス対応クライアントリスト


NICT 公開 NTP サービス対応クライアント募集中     
「NICT 公開 NTP サービスに対応」とは、 デフォルトの時刻サーバにNICTのサーバが設定されているクライアントです。
設定を変更することなく、日本標準時に同期することができます。


クライアント名* プラットホーム NTP http https 一言アピール
太助時計 Windows 95/98/Me/2000/Xp
高精度です
ピッタリでチュ!


Donut Q Windows 95/98/98SE/Me/
NT4/2000/XP/Vista
×
国産の超高速タブブラウザです
*各クライアントソフトは外部のソフトであり、各クライアント名から外部サイトにリンクしています

クライアント開発者向け情報(ガイドライン)


  • ポーリング間隔は1時間平均で20回(あるいは1日平均で480回)を越えないようにしてください( FAQにもあります)

  • 本サービスでは複数台のNTPサーバを、1つのサーバ名(ntp.nict.jp)で提供しています。 メンテナンス等により、いくつかのサーバが一時的に利用できない場合がありますが、ntp.nict.jp で名前解決される 全てのIPアドレスを参照することにより、信頼性を向上させることができます。例えば、 ntpdの"pool"コマンドやOpenNTPDの"servers"コマンド("server"ではなく「複数形の"s"が付いています」) などの実装が知られています。


NICT NTPクライアントコンテスト


NICT NTPクライアントコンテスト


2006年にコンテストを開催しました。

次回の開催は検討中です。



Tips


1. NTP時刻から「年月日」への変換


(a) C の場合

NTP時刻とPOSIX時刻のオフセット(2208988800秒)を補正してからctime()等を使用する。

#include <stdio.h>
#include <time.h>

main() {
unsigned long ntptime;
time_t posixtime;

posixtime = (time_t)(ntptime - 2208988800UL);
printf("%s\n", ctime(&posixtime));
}

(b)(Excel等の)表計算ソフトの場合

例えば、NTP時刻が 3429398305.823 の場合、セルに次のような計算式[*]を入れます。

=(3429398305.823)/86400 +2 +9/24 

このままでは単に数字「39694.49」が表示されますが、セルの書式を「日付」にして、書式コードを YYYY/M/D H:MM:SS にすれば次のように表示されます。

2008/9/3 11:38:26

[*] 表計算ソフトウェアは起点となる日(エポック)からの日数でカウントするので、経過秒数を1日分の秒数86400で割れば、経過日数を得ることができます。
また、小数点以下が時分秒を表しますがntp時刻は協定世界時ですので日本標準時にするために、"+9/24" を加えて9時間進めます。一方、"+2" は日数修正項で、日時やソフトウェアに依存します[**]。

[**] 例えば、同じMicrosoft社のExcelでも、Windows版とMacintosh版ではデフォルトのエポックが異なっています。更に1900/1/1をエポックとしたソフトウェアでは、1900年を非閏年として扱うために、1900/3/1以降とその前で修正項を "+2" あるいは "+1" の切替を必要とする場合(VisiCalc, Lotus 1-2-3, Windows版Excelなど)があります


(c) gnuplot の場合


gnuplot のエポックは 2000/1/1(MJD 51544)。

set xdata time
set timefmt "%m/%d/%y %H"                 # xrange 指定用フォーマット
set xrange ["09/21/06 15":"09/21/06 21"]  # timefmt での xrange 設定
set format x "%Y/%m/%d\n%H:%M:%S"         # x-軸表示のフォーマット
set xtics 60
set xlabel "JST"
p 'datafile' u ($1-314106400+9*3600):2

2. JSONP形式時刻情報の利用

・JSONP 形式時刻情報の概要

http://ntp-a1.nict.go.jp/cgi-bin/jsont?1232963971.248

上記のURLでサーバにアクセスすると、次のような文字列が返されます。

jsont( { "id": "ntp-a1.nict.go.jp",
"it": 1232963971.248,
"st": 1232963971.920,
"leap": 33,
"next": 1230768000,
"step": 1 } )

それぞれの値の意味は、次の通りです。

id: "ntp-a1.nict.go.jp" サーバID
it: 1232963971.248 発信時刻(クライアントから送信された時刻)
st: 1232963971.920 サーバ時刻
leap: 33 next 以前の時点での UTC と TAI の差(秒)
next: 1230768000 次、または最後のうるう秒イベント時刻
step: 1 次、または最後のうるう秒イベントが挿入の場合 1、削除の場合 -1

コールバック関数 jsont(json) 中では、json["id"]、json["it"]、json["st"]にそれぞれ、"ntp-a1.nict.go.jp"、1232963971.248、1232963971.920 が入ることになります。
なお、時刻表記は UNIX Time(POSIX仕様) で、少数以下3桁(ミリ秒まで)となっています。
また、クライアントからの発信時刻を使わない場合は、URLの"?"以下は省略できます。


・JSONP 形式時刻情報の利用方法

下の html ファイルを sample.html に保存し、Web ブラウザで実行してみてください。
alert ウィンドウがポップアップし、サーバ ntp-a1.nict.go.jp から供給された時刻が表示されます。


<html>
<head>

<script type="text/javascript">
function jsont(json)
{
var tm = new Date( json["st"] * 1000 );
alert( tm.toLocaleString() );
}
</script>

<script type="text/javascript" src="http://ntp-a1.nict.go.jp/cgi-bin/jsont">
</script>

</head>
</html>

「日本標準時表示ページ(JSONP版)」では、リクエストの送信時刻とサーバ時刻、レスポンスの到着時刻の3つから、ローカルクロックとサーバ時刻との差を推定しています。
また、複数のサーバにアクセスすることにより、取得した時刻情報のチェックおよび、平均化による時刻誤差低減を行っています。



Page Top



この改行は必要→