【问题标题】:C++ Failure comparing two std::chrono::time_points with same duration [duplicate]C ++失败比较两个具有相同持续时间的std :: chrono :: time_points [重复]
【发布时间】:2015-07-06 22:39:24
【问题描述】:

我正在尝试将 std::chrono::time_point 转换为 long 变量,然后再转换回 std::chrono::time_point 类。 long 变量将用于在我的架构上发送客户端/服务器消息。

所以我有以下测试代码(代码here):

int main ()
{
    std::chrono::time_point<std::chrono::system_clock> now = std::chrono::system_clock::now();

    auto epoch = now.time_since_epoch();
    auto value = std::chrono::duration_cast<std::chrono::milliseconds>(epoch);
    long duration = value.count();

    std::cout << "Duration=" << duration << std::endl;  

    std::chrono::milliseconds ms(duration);

    std::chrono::time_point<std::chrono::system_clock> dt(ms);

    auto epoch1 = dt.time_since_epoch();
    auto value1 = std::chrono::duration_cast<std::chrono::milliseconds>(epoch1);
    long duration1 = value1.count();
    std::cout << "Duration1=" << duration1 << std::endl;  

    if (dt != now)
        std::cout << "Failure." << std::endl;
    else
        std::cout << "Success." << std::endl;
}

从输出来看,我有:

Duration=1436221951916
Duration1=1436221951916
Failure.

为什么两个持续时间相同但两次不同(比较Failure)?我在这里错过了什么?

帮助表示赞赏。

【问题讨论】:

    标签: c++ c++11 chrono


    【解决方案1】:

    您从std::chrono::time_pointlong 的转换会将时间点舍入到毫秒。

    this question on how properly serialize and deserialize time_points

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-03
      • 2023-03-07
      • 1970-01-01
      相关资源
      最近更新 更多