【问题标题】:Storing a time_point outside of the application在应用程序之外存储 time_point
【发布时间】:2017-06-13 20:38:49
【问题描述】:

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

如果它是一个 UNIX 时间戳,我可以简单地将值存储为整数。有没有办法类似地存储time_point

【问题讨论】:

    标签: c++11 timestamp chrono


    【解决方案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}};
    }
    

    【讨论】:

    • 谢谢,我明天去看看!
    猜你喜欢
    • 2015-05-11
    • 1970-01-01
    • 2016-09-10
    • 2012-10-10
    • 2013-02-10
    • 1970-01-01
    • 2015-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多