2011-10-31 52 views
1

海合會(GCC)4.6.1獲得一個網絡時間協議(NTP)時間戳

我使用RTF 4566創造一些SDP和我想要得到的NTP時間戳,這樣我可以使用它的會話ID。建議使用網絡時間協議(NTP)格式時間戳來確保唯一性。

但是,是否有任何函數會返回ntp時間?

非常感謝任何建議,

+0

我懷疑你可以抓住一個NTP客戶端庫來做到這一點。你在Linux上?你的發行版有一個嗎? – Rup

+0

由於NTP非常複雜,我建議您將運行程序的計算機同步到NTP服務器,並使用本地時間戳。 –

+0

我認爲這可能很簡單,因爲NTP只有1900年的秒數。我想使用NTP的原因是RTC推薦的。我正在編譯紅帽。我只需要有一個獨特的價值。謝謝。 – ant2009

回答

3

如果有人有興趣,這是我如何解決我的問題。

/* Get the time in micro seconds to create an unique session id */ 
time_usec = apr_time_usec(apr_time_now()); 
apr_snprintf(session_id, MAX_STRING_LEN, "%lu", (unsigned long)time_usec); 

希望這可以幫助別人,

+0

總是很好地提及解決您的問題。 –

2

的NTP時間戳由代表自1900年1月1日的秒數和一個32位的範圍內的值添加的值的小數部分32位寬值* 1 /(2^32)幾秒鐘。 1 /(2^32)的秒數小於納秒(準確的說是233微秒)。

使用clock_gettime()可以獲得這樣的精度值。無論如何,應該使用clock_getres()來測試時鐘分辨率是否足夠高以提供有效值。

1

肯定有一個更好的辦法來做到這一點,但是這一個應該的作品。

#include <stdio.h> 
#include <sys/time.h> //gettimeofday() 
    int main() 
    { 
    struct timeval NTP_value; 

    gettimeofday(&NTP_value, NULL); 

    printf("\nsince January 1, 1970: %ld.%ld s\n", (long int)NTP_value.tv_sec,(long int)NTP_value.tv_usec); 
    // that value is since 1970. So you just have to add 70years and 17 days 
    printf("\nsince January 1, 1900: %.6f s\n", (float)NTP_value.tv_sec+ (float)2208988800 + (float)NTP_value.tv_usec/1000000); 
    return 0; 
    }