CLewaimaiTime.cpp 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. #include "../pch/pch.h"
  2. #include "CLewaimaiTime.h"
  3. CLewaimaiTime::CLewaimaiTime()
  4. {
  5. }
  6. CLewaimaiTime::~CLewaimaiTime()
  7. {
  8. }
  9. time_t CLewaimaiTime::StringToDatetime(string str)
  10. {
  11. char *cha = (char*)str.data(); // 将string转换成char*。
  12. tm tm_; // 定义tm结构体。
  13. int year, month, day, hour, minute, second;// 定义时间的各个int临时变量。
  14. sscanf(cha, "%d-%d-%d %d:%d:%d", &year, &month, &day, &hour, &minute, &second);// 将string存储的日期时间,转换为int临时变量。
  15. tm_.tm_year = year - 1900; // 年,由于tm结构体存储的是从1900年开始的时间,所以tm_year为int临时变量减去1900。
  16. tm_.tm_mon = month - 1; // 月,由于tm结构体的月份存储范围为0-11,所以tm_mon为int临时变量减去1。
  17. tm_.tm_mday = day; // 日。
  18. tm_.tm_hour = hour; // 时。
  19. tm_.tm_min = minute; // 分。
  20. tm_.tm_sec = second; // 秒。
  21. tm_.tm_isdst = 0; // 非夏令时。
  22. time_t t_ = mktime(&tm_); // 将tm结构体转换成time_t格式。
  23. return t_; // 返回值。
  24. }
  25. string CLewaimaiTime::DatetimeToString(time_t time)
  26. {
  27. struct tm tm_;
  28. #ifdef _WIN32
  29. localtime_s(&tm_, &time); // 将time_t格式转换为tm结构体
  30. #else
  31. localtime_r(&time, &tm_); // 将time_t格式转换为tm结构体
  32. #endif
  33. int year, month, day, hour, minute, second;// 定义时间的各个int临时变量。
  34. year = tm_.tm_year + 1900; // 临时变量,年,由于tm结构体存储的是从1900年开始的时间,所以临时变量int为tm_year加上1900。
  35. month = tm_.tm_mon + 1; // 临时变量,月,由于tm结构体的月份存储范围为0-11,所以临时变量int为tm_mon加上1。
  36. day = tm_.tm_mday; // 临时变量,日。
  37. hour = tm_.tm_hour; // 临时变量,时。
  38. minute = tm_.tm_min; // 临时变量,分。
  39. second = tm_.tm_sec; // 临时变量,秒。
  40. char yearStr[5], monthStr[3], dayStr[3], hourStr[3], minuteStr[3], secondStr[3];// 定义时间的各个char*变量。
  41. sprintf(yearStr, "%d", year); // 年。
  42. sprintf(monthStr, "%d", month); // 月。
  43. sprintf(dayStr, "%d", day); // 日。
  44. sprintf(hourStr, "%d", hour); // 时。
  45. sprintf(minuteStr, "%d", minute); // 分。
  46. if (hourStr[1] == '\0') // 如果小时为一位,如5,则需要转换字符串为两位,如05。
  47. {
  48. hourStr[2] = '\0';
  49. hourStr[1] = hourStr[0];
  50. hourStr[0] = '0';
  51. }
  52. if (minuteStr[1] == '\0') // 如果分为一位,如5,则需要转换字符串为两位,如05。
  53. {
  54. minuteStr[2] = '\0';
  55. minuteStr[1] = minuteStr[0];
  56. minuteStr[0] = '0';
  57. }
  58. sprintf(secondStr, "%d", second); // 秒。
  59. if (secondStr[1] == '\0') // 如果秒为一位,如5,则需要转换字符串为两位,如05。
  60. {
  61. secondStr[2] = '\0';
  62. secondStr[1] = secondStr[0];
  63. secondStr[0] = '0';
  64. }
  65. char s[20]; // 定义总日期时间char*变量。
  66. sprintf(s, "%s-%s-%s %s:%s:%s", yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);// 将年月日时分秒合并。
  67. string str(s); // 定义string变量,并将总日期时间char*变量作为构造函数的参数传入。
  68. return str; // 返回转换日期时间后的string变量。
  69. }
  70. string CLewaimaiTime::DatetimeToDateString(time_t time)
  71. {
  72. struct tm tm_;
  73. #ifdef _WIN32
  74. localtime_s(&tm_, &time); // 将time_t格式转换为tm结构体
  75. #else
  76. localtime_r(&time, &tm_); // 将time_t格式转换为tm结构体
  77. #endif
  78. int year, month, day, hour, minute, second;// 定义时间的各个int临时变量。
  79. year = tm_.tm_year + 1900; // 临时变量,年,由于tm结构体存储的是从1900年开始的时间,所以临时变量int为tm_year加上1900。
  80. month = tm_.tm_mon + 1; // 临时变量,月,由于tm结构体的月份存储范围为0-11,所以临时变量int为tm_mon加上1。
  81. day = tm_.tm_mday; // 临时变量,日。
  82. hour = tm_.tm_hour; // 临时变量,时。
  83. minute = tm_.tm_min; // 临时变量,分。
  84. second = tm_.tm_sec; // 临时变量,秒。
  85. char yearStr[5], monthStr[3], dayStr[3], hourStr[3], minuteStr[3], secondStr[3];// 定义时间的各个char*变量。
  86. sprintf(yearStr, "%d", year); // 年。
  87. sprintf(monthStr, "%d", month); // 月。
  88. sprintf(dayStr, "%d", day); // 日。
  89. sprintf(hourStr, "%d", hour); // 时。
  90. sprintf(minuteStr, "%d", minute); // 分。
  91. if (hourStr[1] == '\0') // 如果小时为一位,如5,则需要转换字符串为两位,如05。
  92. {
  93. hourStr[2] = '\0';
  94. hourStr[1] = hourStr[0];
  95. hourStr[0] = '0';
  96. }
  97. if (minuteStr[1] == '\0') // 如果分为一位,如5,则需要转换字符串为两位,如05。
  98. {
  99. minuteStr[2] = '\0';
  100. minuteStr[1] = minuteStr[0];
  101. minuteStr[0] = '0';
  102. }
  103. sprintf(secondStr, "%d", second); // 秒。
  104. if (secondStr[1] == '\0') // 如果秒为一位,如5,则需要转换字符串为两位,如05。
  105. {
  106. secondStr[2] = '\0';
  107. secondStr[1] = secondStr[0];
  108. secondStr[0] = '0';
  109. }
  110. char s[11]; // 定义总日期时间char*变量。
  111. sprintf(s, "%s-%s-%s", yearStr, monthStr, dayStr);// 将年月日合并。
  112. string str(s); // 定义string变量,并将总日期时间char*变量作为构造函数的参数传入。
  113. return str; // 返回转换日期时间后的string变量。
  114. }
  115. string CLewaimaiTime::DatetimeToHourString(time_t time)
  116. {
  117. struct tm tm_;
  118. #ifdef _WIN32
  119. localtime_s(&tm_, &time); // 将time_t格式转换为tm结构体
  120. #else
  121. localtime_r(&time, &tm_); // 将time_t格式转换为tm结构体
  122. #endif
  123. int hour = tm_.tm_hour;
  124. return to_string(hour);
  125. }
  126. #ifdef _WIN32
  127. std::chrono::steady_clock::time_point CLewaimaiTime::getTimeStamp()
  128. {
  129. return std::chrono::high_resolution_clock::now();
  130. }
  131. float CLewaimaiTime::getTimeDiff(std::chrono::steady_clock::time_point start, std::chrono::steady_clock::time_point end)
  132. {
  133. return std::chrono::duration<float, std::milli>(end - start).count();
  134. }
  135. #else
  136. std::chrono::_V2::system_clock::time_point CLewaimaiTime::getTimeStamp()
  137. {
  138. return std::chrono::high_resolution_clock::now();
  139. }
  140. float CLewaimaiTime::getTimeDiff(std::chrono::_V2::system_clock::time_point start, std::chrono::_V2::system_clock::time_point end)
  141. {
  142. return std::chrono::duration<float, std::milli>(end - start).count();
  143. }
  144. #endif