unsigned long long 到 std::chrono::time_point 并返回
unsigned long long to std::chrono::time_point and back
我对某件事感到很困惑。鉴于:
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);
我对某件事感到很困惑。鉴于:
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);