【问题标题】:Add milliseconds to timeval C++将毫秒添加到 timeval C++
【发布时间】:2017-09-15 10:00:55
【问题描述】:

通过下面的代码,我可以获得以毫秒为单位的当前时间。现在我想将毫秒添加到系统时间。有什么提示吗?

#include <stdio.h>
#include <sys/time.h>

int main (int argc, char** argv) {
    struct timeval time;
    gettimeofday (&time, NULL);

    long systemtime = time.tv_sec*1000L + time.tv_usec/1000L;

     printf("Time in milliseconds: %ld milliseconds\n", systemtime);
     //sample output: 1492592522106

     return 0;
}

编辑:已解决

#include <stdio.h>
#include <sys/time.h>

int main (int argc, char** argv) {
    struct timeval time;
    gettimeofday (&time, NULL);

    printf("Time in milliseconds: %ld milliseconds\n", time.tv_sec*1000L + 
    (time.tv_usec/1000L));
    printf("Time in milliseconds+300: %ld milliseconds\n", time.tv_sec*1000L 
    + (time.tv_usec/1000L+300));
    printf("usec: %ld", time.tv_usec/1000L);

    return 0;
}

输出:

Time in milliseconds: 1492595580965 milliseconds (Wed, 19 Apr 2017 09:53:00.965 GMT)
Time in milliseconds+300: 1492595581265 milliseconds (Wed, 19 Apr 2017 09:53:01.265 GMT)
usec: 965

【问题讨论】:

  • 我已经有了以毫秒为单位的当前时间。现在我想将例如 300ms 添加到当前时间(代码中的系统时间)。
  • systemtime += 300; ?
  • "将毫秒添加到系统时间" 请说明您希望它具有的确切效果
  • 例如当前时间是 09:10:53.000。我想给它加300ms,所以结果是:09:10:53.300

标签: c++ linux ubuntu timeval


【解决方案1】:

您可以使用std::chrono 库来执行此任务。 以下代码 sn-p 将帮助您解决此问题,

auto now = std::chrono::system_clock::now().time_since_epoch();
auto t100ms = std::chrono::milliseconds(100);
auto time = now + t100ms;
std::cout << std::chrono::duration_cast<std::chrono::milliseconds>(time).count();

【讨论】:

  • std::chrono 仅适用于 C++11 及更高版本。您应该在回答中提及这一点。
  • std::chrono 需要包括在内:#include &lt;chrono&gt;
【解决方案2】:

您尝试过 adjtime() 吗? . http://man7.org/linux/man-pages/man3/adjtime.3.html

【讨论】:

  • 不相关。 adjtime() 用于调整系统时钟 ... op 只想修改 timeval 类型的变量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-10
  • 2013-01-27
  • 2013-06-22
  • 2017-02-06
  • 1970-01-01
  • 2023-01-19
相关资源
最近更新 更多