公開NTP



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


  • ポーリング間隔は16秒以上開けてください。

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


Tips


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で割れば、経過日数を得ることができます。
また、小数・E_以下が時分秒を表しますが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





おねがい

ご意見・ご質問は連絡先までお願いします。