将NTP时间戳转换为utc

sco*_*eep 2 ntp c#-4.0

什么是将NTP时间戳转换为utc的最简单方法.我知道它在NTP中,我可以将其转换为任何其他格式.

谢谢.鲍勃.

Kas*_*Kas 18

正如rene所指出的那样,NTP时间戳由一个整数和一个小数部分组成.整数部分表示自基准时间以来的秒数,即1900年1月1日.小数部分表示第二部分中的分数单位数(单位为1 /((2 ^ 32)-1)).

此外,时间表示是UTC.

因此,如果您的NTP时间戳为14236589681638796952.NTP是64位无符号定点数.我们可以说:

UInt64 ntpTimestamp = 14236589681638796952;

高32位由下式给出:

UInt32秒=(UInt32)((ntpTimestamp >> 32)&0xFFFFFFFF);

低32位由下式给出:

UInt32分数=(UInt32)(ntpTimestamp&0xFFFFFFFF);

以秒为单位的数字等于最重要的单词或在这种情况下:秒== 3314714339

可以使用此计算从分数计算毫秒数:

Int32毫秒=(Int32)(((Double)fraction/UInt32.MaxValue)*1000);

在这种情况下,这是12.

因此,DateTime值来自:

DateTime BaseDate = new DateTime(1900,1,1,0,0,0,0,DateTimeKind.Utc);

DateTime dt = BaseDate.AddSeconds(seconds).AddMilliseconds(毫秒);

因此,NTP时间戳14236589681638796952等于2005年1月14日17:58:59和12毫秒UTC.