NTP → Unix タイムスタンプ コンバーター
NTP を Unix 時間に変換します。正確な式と大きな値への対応。出力は秒、ミリ秒、ISO 8601、可読形式。
1900-01-01 UTC からの秒数
現在の時刻 — NTP タイムスタンプ—
Unix タイムスタンプ(秒)—
NTP タイムスタンプとは?
Network Time Protocol は時間を 1900 年 1 月 1 日 00:00:00 UTC から数えます。古典的な 64 ビット NTP タイムスタンプは、32 ビットの秒カウントと 32 ビットの秒の小数部に分かれます。このコンバーターは整数秒フィールド(変換が必要な最も一般的な値)を扱います。
- エポック:1900-01-01 00:00:00 UTC
- 形式:32 ビット秒 + 32 ビット秒小数(約 233 ピコ秒の分解能)
- 現在の値はおよそ 3.9 × 10^9
- 見られる場所:NTP/SNTP パケット、RADIUS、一部のロギングおよびテレメトリ形式
NTP を Unix タイムスタンプに変換する方法
1900 年と 1970 年の間には 2,208,988,800 秒あります。この定数を NTP 秒フィールドから引いて Unix 秒を得ます。
- Unix seconds = NTP − 2208988800
- 例:3908988800 → 1700000000 → 2023-11-14 22:13:20 UTC
- 逆方向:NTP = Unix seconds + 2208988800
- 32 ビットの小数フィールド ÷ 2^32 が秒未満の部分を与える
NTP のエラと 2036 年ロールオーバー
32 ビットの秒フィールドはおよそ 136 年ごとにオーバーフローします。最初の NTP エラは 2036 年 2 月 7 日に終わり、その後は秒カウンタがゼロに巻き戻り、「エラ番号」を別途追跡する必要があります。2,208,988,800 を単純に引くのはエラ 0 の中でのみ有効です。2036 年ロールオーバー以降のタイムスタンプでは、エラごとに 2^32 秒を足す必要があります。今日の日付には単純な減算で正しくなります。
- エラ 0 は 1900 年から 2036-02-07 までをカバーする
- ロールオーバー後は、オフセットを引く前に 4294967296 × eraNumber を足す
- NTP タイムスタンプは UTC で、秒フィールドにはうるう秒をエンコードしない
関連するタイムスタンプ形式コンバーター
隣接する時刻プロトコル
NTP が最も一般的ですが、その周辺のエコシステムには次が含まれます:
- SNTP:シンプルな NTP。同じワイヤ形式で、精度は低くクロック規律はない
- PTP(IEEE 1588):金融や放送で使われるナノ秒精度のプロトコル — ワイヤ形式は異なるが、エポックの考え方は似ている
- Stratum 0 のハードウェア(原子時計、GPS 受信機)が Stratum 1 サーバーに種を与え、それがクライアントに提供する
- NTP タイムスタンプは RADIUS Accounting(Event-Timestamp)や多くの IPsec 実装などのプロトコルに埋め込まれる
- UTC のうるう秒処理のため、NTP は leap indicator フィールドのビットフラグを使う。秒フィールド自体は跳ばない
FAQ
- NTP のエポックとは?
- NTP は 1900 年 1 月 1 日 00:00:00 UTC からの秒を数えます。
- NTP 時刻を Unix 時間に変換するには?
- NTP の秒値から 2,208,988,800 秒を引いて、Unix タイムスタンプを得ます。
- 2036 年に NTP はどうなるのか?
- 32 ビットの秒カウンターが 2036 年 2 月 7 日にオーバーフローしてゼロに戻り、NTP 紀元 1 が始まります。変換器は以後のタイムスタンプを正しく解釈するため、紀元番号を追跡する必要があります。