从high_resolution_clock获得time_point时,如何打印time_point?

timestamp = std::chrono::high_resolution_clock::now();
std::time_t now = std::chrono::system_clock::to_time_t(timestamp);
std::cout << std::ctime(&now) << std::endl;

编译时收到以下错误消息:
error: no viable conversion from 'time_point<class std::__1::chrono::steady_clock, duration<[...], ratio<[...], 1000000000>>>' to 'const time_point<class std::__1::chrono::system_clock, duration<[...], ratio<[...], 1000000>>>'
        time_t tt = std::chrono::system_clock::to_time_t(timestamp);

最佳答案

没有真正优雅的方法可以做到这一点。未知high_resolution_clock与UTC或任何其他日历有关。您可以移植的一件事是从其未指定的时期输出其当前持续时间,以及该持续时间的单位:

#include <chrono>
#include <iostream>

int
main()
{
    using Clock = std::chrono::high_resolution_clock;
    constexpr auto num = Clock::period::num;
    constexpr auto den = Clock::period::den;
    std::cout << Clock::now().time_since_epoch().count()
              << " [" << num << '/' << den << "] units since epoch\n";
}

对我来说输出:
516583779589531 [1/1000000000] units since epoch

这意味着距我的计算机上该时钟的纪元以来为516583779589531纳秒(或516,583.779589531秒)。在我的机器上,这表示为:我的机器已经启动了将近6天。但是这种翻译不是可移植的。

啊!我从错误消息中注意到,您正在使用libc++。如果您也使用OS X,则我们对high_resolution_clock的定义相同:自从您的计算机启动以来,它的计数时间为纳秒。

08-17 03:51