我对某些事情感到非常困惑。给定:
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);