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

使用std::chrono?将纳秒(从午夜开始)转换为可打印时间?[已关闭]

  •  -3
  • intrigued_66  · 技术社区  · 7 年前

    您将如何转换 uint64_t (表示自午夜以来的纳秒数)到人类可读时间,例如:

    HH:MM:SS.nnnnnnnnn
    

    使用标准C++Chrono库?

    1 回复  |  直到 7 年前
        1
  •  1
  •   John Mansell    7 年前

    澄清

    如果我告诉你现在是4:30,你根本不知道今天是8月10日。

    所以我假设你正在尝试转换 新纪元时间 (自1970年1月1日起的数字或秒)转换为人类可读的日期。

    要开始,请查看 this 页面作为指南。


    Here

    #include <ctime>
    #include <iostream>
    
    int main()
    {
        std::time_t result = std::time(nullptr);
        std::cout << std::ctime(&result);
    }
    

    这是为了获取当前纪元时间,并将其转换为人类可读的日期和时间。这确实假设为秒,而不是纳秒。如果需要纳秒,只需将纳秒数除以1E9即可。1秒内有1E9纳秒。剩下的是秒数,然后可以将其转换为人类可读的代码。

    如果您还使用[number of nano seconds%1E9],那么结果将是纳秒数,如果这很重要的话。该数字可以添加到上述代码返回的日期的末尾。

    答案2

    #include <iostream>
    #include <chrono>
    #include <ctime>
    
    long fibonacci(unsigned n)
    {
        if (n < 2) return n;
        return fibonacci(n-1) + fibonacci(n-2);
    }
    
    int main()
    {
        auto start = std::chrono::system_clock::now();
        std::cout << "f(42) = " << fibonacci(42) << '\n';
        auto end = std::chrono::system_clock::now();
    
        std::chrono::duration<double> elapsed_seconds = end-start;
        std::time_t end_time = std::chrono::system_clock::to_time_t(end);
    
        std::cout << "finished computation at " << std::ctime(&end_time)
                  << "elapsed time: " << elapsed_seconds.count() << "s\n";
    }
    

    看见 this link

    如果这解决了你的问题,或者我回答了错误的问题,请告诉我。