公開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