c++ - 将 steady_clock::time_point 转换为 time_t

标签 c++ c++11 c++-chrono

我正在使用 steady_clock 来保存一些消息的时间戳。出于调试目的,拥有日历(或类似的东西)很有用。

对于其他时钟,有静态函数 to_time_t,但在 GCC (MinGW 4.8.0) 上,此函数不存在。

现在我打印类似的东西:

Timestamp: 26735259098242

对于时间戳,我需要一个 steady_clock,所以我不能使用 system_clock 或其他。

编辑 之前的打印是从 time_since_epoch().count()

给出的

最佳答案

假设您需要内部计算的稳定行为,而不是显示,这里有一个函数可用于转换为 time_t 以供显示。

using std::chrono::steady_clock;
using std::chrono::system_clock;

time_t steady_clock_to_time_t( steady_clock::time_point t )
{
    return system_clock::to_time_t(system_clock::now()
                 + duration_cast<system_clock::duration>(t - steady_clock::now()));
}

如果您需要稳定的日志记录行为,您会希望在启动时获得一对 ( system_clock::now(), steady_clock::now() ) 并在之后永远使用它。

关于c++ - 将 steady_clock::time_point 转换为 time_t,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18361638/

相关文章:

C++ 使用 std::chrono 以一种很好的方式测量成员函数的执行

C++ fstream 告诉行为

c++ - 为什么 fcntl() 标志值以八进制格式定义以及此函数如何用于阻塞/非阻塞套接字?

c++ - g++,如何找到出错的地方?

c++ - 使用 cin 获取多个带空格的输入

c++ - 使用 std chrono 库将 double 转换为时间点

c++ - 使用模板化类型的模板中的函数原型(prototype)

c++ - g++ 和 boost 中 regex_replace() 替换字符串中 '\' 的不同处理

c++11 - 无法使用 SFINAE (std::enable_if) 覆盖虚函数

c++ - 在 seconds::max 处创建一个 time_point 结果为负值