unsigned long long到std::chrono::time_point并返回



我对某些事情感到非常困惑。给定:

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对象?我发现自己在做一些奇怪的事情(我不想在这里展示(,我想问一下正确的补水方法是什么。

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);

相关内容

  • 没有找到相关文章

最新更新