在应用程序之外存储time_point

时间:2017-06-13 20:38:50

标签: c++11 timestamp chrono

我在我的程序中使用std::chrono::system_clock::time_point。 当应用程序停止时,我想将time_point保存到文件,并在应用程序启动时再次加载它。

如果是UNIX-Timestamp,我可以简单地将值存储为整数。有没有办法同样存储time_point

1 个答案:

答案 0 :(得分:1)

是。选择您希望时间戳的精度(秒,毫秒,......纳秒)。然后将system_clock::time_point强制转换为该精度,提取其数值并打印出来:

cout << time_point_cast<seconds>(system_clock::now()).time_since_epoch().count();

虽然标准没有规定,但上述(事实上)线路可以输出自1970-01-01 00:00:00 UTC以来的非闰秒数。也就是说,这是UNIX-Timestamp

我试图让上面的代码得到标准的祝福,以实现今天所有实现所做的事情。我对std :: chrono实现者有非正式的保证,他们不会在此期间改变他们的system_clock时代。

这是一个完整的往返示例:

#include <chrono>
#include <iostream>
#include <sstream>


int
main()
{
    using namespace std;
    using namespace std::chrono;

    stringstream io;
    io << time_point_cast<seconds>(system_clock::now()).time_since_epoch().count();

    int64_t i;
    system_clock::time_point tp;
    io >> i;
    if (!io.fail())
        tp = system_clock::time_point{seconds{i}};
}