1

海合会 (GCC) 4.6.1

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

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

非常感谢您的任何建议,

4

3 回答 3

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);

希望这可以帮助某人,

于 2011-11-02T15:32:34.810 回答
2

NTP 时间戳由一个 32 位宽的值组成,该值表示自 1.1.1900 以来的秒数,一个 32 位宽的值加上 value*1/(2^32) 秒的小数部分。1/(2^32) 秒小于 1 纳秒(准确地说是 233 皮秒)。

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

于 2011-11-01T08:39:00.030 回答
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;
    }
于 2012-04-26T12:17:56.370 回答