How to convert std::chrono::time_point to calendar datetime string with fractional seconds?

后端 未结 7 2031
生来不讨喜
生来不讨喜 2020-11-27 02:50

How to convert std::chrono::time_point to calendar datetime string with fractional seconds?

For example:

\"10-10-2012 12:38:40.123456\"         


        
相关标签:
7条回答
  • 2020-11-27 03:33

    If system_clock, this class have time_t conversion.

    #include <iostream>
    #include <chrono>
    #include <ctime>
    
    using namespace std::chrono;
    
    int main()
    {
      system_clock::time_point p = system_clock::now();
    
      std::time_t t = system_clock::to_time_t(p);
      std::cout << std::ctime(&t) << std::endl; // for example : Tue Sep 27 14:21:13 2011
    }
    

    example result:

    Thu Oct 11 19:10:24 2012
    

    EDIT: But, time_t does not contain fractional seconds. Alternative way is to use time_point::time_since_epoch() function. This function returns duration from epoch. Follow example is milli second resolution's fractional.

    #include <iostream>
    #include <chrono>
    #include <ctime>
    
    using namespace std::chrono;
    
    int main()
    {
      high_resolution_clock::time_point p = high_resolution_clock::now();
    
      milliseconds ms = duration_cast<milliseconds>(p.time_since_epoch());
    
      seconds s = duration_cast<seconds>(ms);
      std::time_t t = s.count();
      std::size_t fractional_seconds = ms.count() % 1000;
    
      std::cout << std::ctime(&t) << std::endl;
      std::cout << fractional_seconds << std::endl;
    }
    

    example result:

    Thu Oct 11 19:10:24 2012
    
    925
    
    0 讨论(0)
提交回复
热议问题