回答
尝试这样? “1900年1月1日以来的秒数”格式我不确定,但您可以根据需要进行修改。
long ntp = 3490905600;
DateTime start = new DateTime(1900, 1, 1);
DateTime dt = start.AddSeconds(ntp);
Console.WriteLine(dt.ToString());
Console.WriteLine(dt.ToUniversalTime().ToString());
谢谢。我刚回来自己回答。 – 2011-03-05 21:58:49
正如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 BaseDate =新日期时间(1900年,1,1,0,0,0,0,DateTimeKind.Utc);
DateTime dt = BaseDate.AddSeconds(seconds).AddMilliseconds(milliseconds);
因此,14236589681638796952的NTP时间戳等于2005年1月14日17:58:59和12毫秒UTC。
这个工作可靠,对我来说:
#define NTP_TIMESTAMP_DIFF (2208988800) // 1900 to 1970 in seconds
#define NTP_MAX_INT_AS_DOUBLE (4294967295.0) // Max value of frac
// take care of the endianness
reply_pkt.tx_time_sec = ntohl(reply_pkt.tx_time_sec) ;
reply_pkt.tx_time_frac = ntohl(reply_pkt.tx_time_frac) ;
// parse
time_t tx_time = (time_t) (reply_pkt.tx_time_sec - NTP_TIMESTAMP_DIFF);
double frac = ((double)reply_pkt.tx_time_frac)/NTP_MAX_INT_AS_DOUBLE ; // 2^32 -1
struct tm *tm = gmtime(&tx_time) ;
char ts[49];
strftime(ts,48,"[%Y-%m-%d %H:%M:%S]",tm);
printf("NTP query: reply was %s\n",ts);
ntp_time_seconds = ((double)tx_time) + frac ;
- 1. 转换为UTC时间戳
- 2. 将时间戳转换为UTC时区
- 3. 将UTC转换为Unix时间戳
- 4. Python:将UTC时间元转换为UTC时间戳
- 5. 将UTC中的时间戳转换为时间戳
- 6. 将UTC时间戳转换为本地设备时间戳
- 7. 转换成时间戳UTC
- 8. Python:我如何将UTC时间戳转换为python utc datetime?
- 9. 转换OffsetDateTime为UTC时间戳
- 10. 转换boost :: posix_time :: ptime到NTP时间戳
- 11. 将UTC时间戳转换为其他时区特定时间
- 12. 如何将utc日期时间转换为模糊时间戳
- 13. PHP - 想将MySQL时间戳转换为UTC +6时间
- 14. postgresql:如何将UTC时间戳转换为悉尼时间
- 15. Java:如何将UTC时间戳转换为本地时间?
- 16. 将时间戳转换为UTC(或GMT)时间?
- 17. 如何将UTC时间转换为Unix时间戳在swift中?
- 18. 将时间戳转换为时间戳
- 19. python将时间转换为utc时间?
- 20. 将UTC时间转换为IST时间
- 21. 转换时间戳从PST到UTC
- 22. 如何将整数时间戳转换回UTC日期时间?
- 23. 将历史时间戳从UTC转换为本地
- 24. logstash。将时间戳转换为UTC并添加到字段
- 25. 在utx awk中将utc时间戳转换为est
- 26. 将64位长的UTC时间戳转换为Actionscript日期
- 27. 如何在MySql中将unix时间戳转换为UTC日期?
- 28. Django/Python时间戳将EDT转换为UTC
- 29. 蟒蛇 - 将UTC时间戳转换为unixtime
- 30. 将输入时间戳从ist转换为utc(UNIX)
你有一个样品的输入? – 2011-03-05 21:43:14
根据这个链接http://souptonuts.sourceforge.net/readme_working_with_time.html自01-01-1990以来的秒数在长ntp的高阶整数中。 – rene 2011-03-05 21:48:09