【问题标题】:Getting a Network Time Protocol (NTP) time stamp获取网络时间协议 (NTP) 时间戳
【发布时间】:2011-10-31 11:51:35
【问题描述】:

gcc (GCC) 4.6.1

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

但是,有什么函数可以返回 ntp 时间吗?

非常感谢您的任何建议,

【问题讨论】:

  • 我怀疑你可以抓住一个 NTP 客户端库来做到这一点。你在linux上吗?你的发行版里有吗?
  • 由于 NTP 相当复杂,我建议您将运行程序的计算机同步到 NTP 服务器,并使用本地时间戳。
  • 我认为这可能很简单,因为 NTP 距离 1900 年只有几秒钟。我想使用 RTC 推荐的 NTP 的原因。我在 Red Hat 上编译。我只需要有一个独特的价值。谢谢。
  • 为什么需要 NTP?使用 gettimeofday() 或 time(NULL) 对你来说还不够吗?
  • 我正在研究这些功能。所以我想如果NTP太复杂我会忘记它。谢谢。

标签: c ntp


【解决方案1】:

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

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

希望这对某人有所帮助,

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      当然有更好的方法,但这个应该可以。

      #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;
          }
      

      【讨论】:

        猜你喜欢
        • 2015-03-10
        • 2023-03-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-12
        • 2011-08-08
        • 1970-01-01
        相关资源
        最近更新 更多