2015-04-01 33 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 
    } 
}