代码之家  ›  专栏  ›  技术社区  ›  ForeverLearning

无符号长到std::chrono::time_point并返回

  •  0
  • ForeverLearning  · 技术社区  · 4 年前

    我很困惑。鉴于:

    std::time_t tt = std::time(0);
    std::chrono::system_clock::time_point tp{seconds{tt} + millseconds{298}};
    std::cout << tp.time_since_epoch().count();
    

    打印如下内容: 16466745672980000 (例如)

    我该如何将该数字重新水化为 time_point 对象我发现自己做了一些奇怪的事情(我不想在这里展示),我想问一下补液的正确方法是什么。

    0 回复  |  直到 4 年前
        1
  •  3
  •   Howard Hinnant    4 年前
    system_clock::time_point tp{system_clock::duration{16466745672980000}};
    

    单位 system_clock::duration 不同的平台不同。在你的平台上我猜是的 1. / 10 微秒。

    出于序列化目的,您可以记录这是 1. / 10 微秒。这可以通过以下方式便携读取:

    long long i;
    in >> i;
    using D = std::chrono::duration<long long, std::ratio<1, 10'000'000>>;
    std::chrono::time_point<std::chrono::system_clock, D> tp{D{i}};
    

    如果本地人 system_clock::time_point 精确到 D 或者更精细,您可以隐式转换为:

    system_clock::time_point tp2 = tp;
    

    否则,您可以选择向上舍入、向下舍入、最接近或向零舍入。例如:

    system_clock::time_point tp2 = round<system_clock::duration>(tp);