【发布时间】:2016-05-01 05:25:15
【问题描述】:
我试图简单地保存并重新加载文件中的当前时间。例如:
std::ifstream ifs(solar_system_cache_file,
std::ios::in | std::ios::binary);
if (!ifs.is_open()) {
return false;
}
std::chrono::system_clock::time_point cache_valid_time;
ifs >> cache_valid_time;
if (std::chrono::system_clock::now() < cache_valid_time) {
std::cout << "Cache is VALID." << std::endl;
}
ifs.close();
return true;
和
std::ofstream ofs(solar_system_cache_file,
std::ios::out | std::ios::binary);
if (!ofs.is_open())
return;
ofs << std::chrono::system_clock::now() + 12h;
ofs.close();
这类事情并不复杂,但我已经四处寻找了几个小时,但找不到相关信息。有一些关于如何使用 duration_cast<long, std::milli> 进行投射的示例,但 std::chrono 非常复杂且难以导航(和消化)。
简而言之,我相信我需要将当前时间转换为long(或一些类似的大类型)并保存。反序列化时间时,我只需将其转换回time_point。这听起来很容易,但我做不到。
最后,简单地在fstream 中传递时间会产生通常的invalid operands to binary expression 错误。
感谢任何帮助,或链接到好的教程/指南。 谢谢
【问题讨论】:
-
您希望序列化格式是人类可读的吗?
-
不,它是二进制形式。我发布了我的解决方案作为答案,当然可以随意解决这个问题:)
标签: c++ c++11 c++14 fstream chrono