time_tool.cpp 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. //
  2. // Created by wk on 2020/9/25.
  3. //
  4. #include "time_tool.h"
  5. Time_tool::Time_tool()
  6. {
  7. }
  8. Time_tool::~Time_tool()
  9. {
  10. Time_tool_uninit();
  11. }
  12. void Time_tool::set_points_digits(int num)
  13. {
  14. std::cout.precision(num);
  15. std::cout.setf(std::ios::fixed);
  16. }
  17. std::chrono::system_clock::time_point Time_tool::get_system_point()
  18. {
  19. return std::chrono::system_clock::now();
  20. }
  21. tm Time_tool::get_current_time_struct()
  22. {
  23. auto now = std::chrono::system_clock::now();
  24. time_t tt = std::chrono::system_clock::to_time_t(now);
  25. tm time_tm=*localtime(&tt);
  26. return time_tm;
  27. }
  28. std::string Time_tool::get_current_time_seconds()
  29. {
  30. auto time_tm = get_current_time_struct();
  31. char strTime[100] = "";
  32. sprintf(strTime, "%d-%02d-%02d %02d:%02d:%02d", time_tm.tm_year + 1900,
  33. time_tm.tm_mon + 1, time_tm.tm_mday, time_tm.tm_hour,
  34. time_tm.tm_min, time_tm.tm_sec);
  35. std::string str=strTime;
  36. return str;
  37. }
  38. std::string Time_tool::get_current_time_millisecond()
  39. {
  40. auto now = std::chrono::system_clock::now();
  41. //通过不同精度获取相差的毫秒数
  42. uint64_t dis_millseconds = std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch()).count()
  43. - std::chrono::duration_cast<std::chrono::seconds>(now.time_since_epoch()).count() * 1000;
  44. std::string strTime=get_current_time_seconds()+" "+std::to_string((int)dis_millseconds);
  45. return strTime;
  46. }
  47. std::string Time_tool::get_current_time_microsecond()
  48. {
  49. auto now = std::chrono::system_clock::now();
  50. //通过不同精度获取相差的微秒
  51. uint64_t dis_microseconds = std::chrono::duration_cast<std::chrono::microseconds>(now.time_since_epoch()).count()
  52. - std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch()).count() * 1000;
  53. std::string strTime=get_current_time_millisecond()+" "+std::to_string((int)dis_microseconds);
  54. return strTime;
  55. }
  56. std::string Time_tool::get_time_string_seconds(std::chrono::system_clock::time_point time_point)
  57. {
  58. time_t tt = std::chrono::system_clock::to_time_t(time_point);
  59. tm time_tm=*localtime(&tt);
  60. char strTime[100] = "";
  61. sprintf(strTime, "%d-%02d-%02d %02d:%02d:%02d", time_tm.tm_year + 1900,
  62. time_tm.tm_mon + 1, time_tm.tm_mday, time_tm.tm_hour,
  63. time_tm.tm_min, time_tm.tm_sec);
  64. std::string str=strTime;
  65. return str;
  66. }
  67. std::string Time_tool::get_time_string_millisecond(std::chrono::system_clock::time_point time_point)
  68. {
  69. //通过不同精度获取相差的毫秒数
  70. uint64_t dis_millseconds = std::chrono::duration_cast<std::chrono::milliseconds>(time_point.time_since_epoch()).count()
  71. - std::chrono::duration_cast<std::chrono::seconds>(time_point.time_since_epoch()).count() * 1000;
  72. std::string strTime=get_time_string_seconds(time_point)+" "+std::to_string((int)dis_millseconds);
  73. return strTime;
  74. }
  75. std::string Time_tool::get_time_string_microsecond(std::chrono::system_clock::time_point time_point)
  76. {
  77. //通过不同精度获取相差的微秒
  78. uint64_t dis_microseconds = std::chrono::duration_cast<std::chrono::microseconds>(time_point.time_since_epoch()).count()
  79. - std::chrono::duration_cast<std::chrono::milliseconds>(time_point.time_since_epoch()).count() * 1000;
  80. std::string strTime=get_time_string_millisecond(time_point)+" "+std::to_string((int)dis_microseconds);
  81. return strTime;
  82. }
  83. void Time_tool::time_start(int key)
  84. {
  85. timetool_map[key].t_time_start=get_system_point();//保存开始的时间 //单位为微秒
  86. }
  87. void Time_tool::time_end(int key)
  88. {
  89. if ( timetool_map.find(key)!=timetool_map.end() )
  90. {
  91. timetool_map[key].t_time_end = get_system_point();//保存结束的时间
  92. timetool_map[key].t_time_difference = timetool_map[key].t_time_end - timetool_map[key].t_time_start;//保存时差
  93. }
  94. else
  95. {
  96. std::cout << "计时器:" << key<<"还未开始"<<std::endl;
  97. }
  98. }
  99. void Time_tool::cout_time_seconds(int key)
  100. {
  101. if ( timetool_map.find(key)!=timetool_map.end() )
  102. {
  103. double dieoutTime=(double)timetool_map[key].t_time_difference.count()/1000000000;
  104. std::cout << "计时器:"<<key<<" 计时的时间为:" <<dieoutTime<<" 秒" << std::endl;
  105. }
  106. else
  107. {
  108. std::cout<<"没有此计时器:"<<key<<std::endl;
  109. }
  110. }
  111. void Time_tool::cout_time_millisecond(int key)
  112. {
  113. if ( timetool_map.find(key)!=timetool_map.end() )
  114. {
  115. double dieoutTime=(double)timetool_map[key].t_time_difference.count()/1000000;
  116. std::cout << "计时器:"<<key<<" 计时的时间为:" <<dieoutTime<<" 毫秒" << std::endl;
  117. }
  118. else
  119. {
  120. std::cout<<"没有此计时器:"<<key<<std::endl;
  121. }
  122. }
  123. void Time_tool::cout_time_microsecond(int key)
  124. {
  125. if ( timetool_map.find(key)!=timetool_map.end() )
  126. {
  127. double dieoutTime=(double)timetool_map[key].t_time_difference.count()/1000;
  128. std::cout << "计时器:"<<key<<" 计时的时间为:" <<dieoutTime<<" 微秒" << std::endl;
  129. }
  130. else
  131. {
  132. std::cout<<"没有此计时器:"<<key<<std::endl;
  133. }
  134. }
  135. void Time_tool::cout_time_nanosecond(int key)
  136. {
  137. if ( timetool_map.find(key)!=timetool_map.end() )
  138. {
  139. std::cout << "计时器:"<<key<<" 计时的时间为:" <<timetool_map[key].t_time_difference.count()<<" 纳秒" << std::endl;
  140. }
  141. else
  142. {
  143. std::cout<<"没有此计时器:"<<key<<std::endl;
  144. }
  145. }
  146. void Time_tool::clear_timer()
  147. {
  148. Time_tool_uninit();
  149. }
  150. void Time_tool::Time_tool_uninit()
  151. {
  152. timetool_map.clear();
  153. }