NTP64ビットタイムスタンプフォーマット

NTP 64ビットタイムスタンプフォーマットを DateTime に変換。

/// <summary>
/// NTP 64ビットタイムスタンプ形式から DateTime に変換します。
/// </summary>
/// <param name="ntpTimeStamp">NTP 64ビットタイムスタンプ。</param>
/// <returns></returns>
static private DateTime NtpTimeStampToDateTime( long ntpTimeStamp ) {
  long seconds = (long)( ntpTimeStamp >> 32 );
  long secondsFraction = (long)( ntpTimeStamp & uint.MaxValue );

  long milliseconds = seconds * 1000 + ( secondsFraction * 1000 ) / COMPENSATING_RATE;
  return GetCompensatingDatetime( seconds ) + TimeSpan.FromMilliseconds( milliseconds );
}

C# 風に。
あたりまえだけど long は IPAddress.NetworkToHostOrder した後のもの。

NTP 64ビットタイムスタンプフォーマット : 32ビットの整数部 + 32ビットの小数部で、1900/1/1からの経過ミリ秒