获取网络时间协议(NTP)时间戳

时间:2011-10-31 11:51:35

标签: c ntp

gcc(GCC)4.6.1

我正在使用RTF 4566创建一些sdp,我想获得NTP时间戳,以便我可以将它用作会话ID。建议使用网络时间协议(NTP)格式时间戳来确保唯一性。

但是,是否有任何函数会返回ntp时间?

非常感谢任何建议,

3 个答案:

答案 0 :(得分: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);

希望这有助于某人,

答案 1 :(得分:2)

NTP时间戳包含一个32位宽的值,表示自1.1.1900以来的秒数,以及一个32位宽的值,为其添加值* 1 /(2 ^ 32)秒的小数部分。 1 /(2 ^ 32)秒的时间小于纳秒(精确到233皮秒)。

使用clock_gettime()可以获得这种精度的值。无论如何,应该使用clock_getres()来测试时钟分辨率是否足够高以提供有效值。

答案 2 :(得分: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;
    }