gpt4 book ai didi

c#-4.0 - 将 NTP 时间戳转换为 UTC

转载 作者:行者123 更新时间:2023-12-04 20:21:26 25 4
gpt4 key购买 nike

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

谢谢。
鲍勃。

最佳答案

正如 rene 指出的,NTP 时间戳由整数和小数部分组成。整数部分表示自基准时间(即 1900 年 1 月 1 日)以来的秒数。小数部分表示秒内的小数单位数(一个单位为 1/((2^32)-1))。
此外,时间表示是 UTC。
因此,如果您有一个 NTP 时间戳,例如 14236589681638796952。NTP 是一个 64 位无符号定点数。我们可以说:

UInt64 ntpTimestamp = 14236589681638796952;


高 32 位由下式给出:

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


低 32 位由下式给出:

UInt32 fraction = (UInt32)(ntpTimestamp & 0xFFFFFFFF);


以秒为单位的数字等于最重要的单词,或者在这种情况下:
秒 == 3314714339
可以使用以下计算从分数中计算毫秒数:

Int32 milliseconds = (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(milliseconds);


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

关于c#-4.0 - 将 NTP 时间戳转换为 UTC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5206857/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com