我在我的程序中使用std::chrono::system_clock::time_point
。
当应用程序停止时,我想将time_point
保存到文件,并在应用程序启动时再次加载它。
如果是UNIX-Timestamp,我可以简单地将值存储为整数。有没有办法同样存储time_point
?
答案 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}};
}