【发布时间】:2017-06-13 20:38:49
【问题描述】:
我在我的程序中使用std::chrono::system_clock::time_point。
当应用程序停止时,我想将time_point 保存到一个文件中,并在应用程序启动时再次加载它。
如果它是一个 UNIX 时间戳,我可以简单地将值存储为整数。有没有办法类似地存储time_point?
【问题讨论】:
我在我的程序中使用std::chrono::system_clock::time_point。
当应用程序停止时,我想将time_point 保存到一个文件中,并在应用程序启动时再次加载它。
如果它是一个 UNIX 时间戳,我可以简单地将值存储为整数。有没有办法类似地存储time_point?
【问题讨论】:
是的。选择您希望时间戳的精度(秒、毫秒、...纳秒)。然后将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}};
}
【讨论】: