C语言 获取NTP (Network Time Protocol)时间戳



gcc (gcc) 4.6.1

我正在使用RTF 4566创建一些sdp,我想获得NTP时间戳,以便我可以将其用于会话ID。建议使用NTP (Network Time Protocol)格式,使用时间戳保证唯一性。

然而,是否有任何函数将返回ntp时间?

非常感谢您的建议,

如果有人感兴趣,这是我如何解决我的问题。

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

希望对大家有所帮助,

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

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

肯定有更好的方法,但是这个应该可以。

#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 sn", (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 sn", (float)NTP_value.tv_sec+ (float)2208988800 + (float)NTP_value.tv_usec/1000000);
    return 0;
    }

最新更新