【问题标题】:How to add duration to time_point?如何将持续时间添加到 time_point?
【发布时间】:2017-12-16 15:15:10
【问题描述】:

我尝试过这样的事情:

using clock = std::chrono::system_clock;
clock::time_point nowp = clock::now();
clock::time_point end = nowp + std::chrono::seconds(10);
time_t nowt =  clock::to_time_t ( nowp );
time_t endt =  clock::to_time_t ( end);
std::cerr  << " " << ctime(&nowt) << " " << ctime(&endt) << std::endl;

但它会打印:

Sat Dec 16 15:06:43 2017
Sat Dec 16 15:06:43 2017

我在这里做错了什么?现在怎么加十秒?

【问题讨论】:

  • 对我来说,您的代码有效:Sat Dec 16 16:26:27 2017 Sat Dec 16 16:26:37 2017
  • 查看Howard Hinnant's date/time library 了解打印计时对象的更简单方法。

标签: c++ chrono


【解决方案1】:

问题可能是因为ctime store 导致了一些静态存储,并且只是将指针返回给您。

所以它会用另一个结果覆盖一个结果并打印 2 次。 标准不固定操作顺序,所以它的作用:

  1. 使用一个参数调用ctime,它将表示保存在内部缓冲区中并返回指向它的指针。
  2. 使用另一个参数调用ctime,它将表示保存在同一个内部缓冲区中并返回指向它的指针。
  3. 打印两个 char* 的值(实际上是同一个指针)

解决方案是通过将运算除以; 来强制评估顺序

fixes problem for me的代码

#include <iostream>
#include <chrono>
using namespace std;


int main() {
    using clock = std::chrono::system_clock;
    clock::time_point nowp = clock::now();
    clock::time_point end = nowp + std::chrono::seconds(10);
    time_t nowt =  clock::to_time_t ( nowp );
    time_t endt =  clock::to_time_t ( end);
    std::cout  << " " << ctime(&nowt) << "\n";
    std::cout << ctime(&endt) << std::endl;
    return 0;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多