2015-04-01 27 views
0

我目前正在用Java写一个NTP客户端和服务器。我正在使用NTP时间戳计算偏移量和往返延迟。我应该指出,我正在计算这些秒数(前32位)和分数(秒32位)分别。我得到抵消结果,如0秒和1859395165分数。用java显示更新的ntp时间

我的问题是,如何根据给定的偏移量调整这些偏移量以打印出我的系统时间?

我在想我可以将分数添加到我的系统当前时间的时间戳的分数部分,但是如果分数的总和大于1秒,我相信我会遇到问题,因为我的秒会不正确。

+0

FYI:http://stackoverflow.com/questions/925191/java-ntp-client – assylias 2015-04-01 16:27:04

+0

我不是太清楚youre设法解决什么问题,但它听起来* *像你所担心的整数溢出?为什么不简单地将秒和分数放入一个long(long =(((long)seconds)<< 32)|(fraction&0xFFFFFFFFL)),计算差值,然后再将它们分开? – Durandal 2015-04-01 17:39:40

+0

感谢您的回复。我只是试图打印什么我的系统时间应该是偏移量已被应用。 – toffoo 2015-04-01 17:55:36

回答

0

您可以先将分数转换为毫秒,然后再进行计算。然后让我们说从服务器返回时间11:05:21:900,偏移量为200毫秒。然后,您只需将其添加到11:05:21:900并获得11:05:22:100。

你只需要一个函数来检查你是否在添加了偏移量后点击了新的秒/分/等。该代码的开头可能看起来像这样。

systemMs += offsetMs; 
if (systemMs >= 1000) 
{ 
    systemS += 1; 
    systemMS -= 1000; 
    if (systemS >= 60) 
    { 
     etc 
    } 
}