time.cpp 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. /*
  2. * 文件名: time.c
  3. * 目标: 关于time的实用函数
  4. */
  5. #include <ctime>
  6. #include "tool.hpp"
  7. /**
  8. * 等待指定的秒数(ms) 支持小数
  9. */
  10. void aFuntool::safeSleep(double ms) {
  11. time_t start = clock();
  12. time_t now;
  13. time_t d_time;
  14. auto ms_t = (time_t) (ms * CLOCKS_PER_SEC);
  15. do {
  16. now = clock();
  17. d_time = now - start;
  18. } while (d_time < ms_t);
  19. }
  20. /**
  21. * 格式化输出时间
  22. * 注意: 该函数不可以使用log模块
  23. */
  24. char *aFuntool::getTime(time_t *t, const char *format) {
  25. time_t tmp;
  26. if (t == nullptr)
  27. t = &tmp;
  28. time (t); // 获取时间戳
  29. #ifdef aFunWIN32_NO_CYGWIN
  30. struct tm lt{};
  31. if (localtime_s(&lt, t) != 0)
  32. return nullptr;
  33. wchar_t time_str[100];
  34. wchar_t *format_ = nullptr;
  35. if (convertWideByte(&format_, format, CP_UTF8) == 0)
  36. return nullptr;
  37. wcsftime(time_str, 100, format_, &lt);
  38. free(format_);
  39. char *re = nullptr;
  40. if (convertFromWideByte(&re, time_str, CP_UTF8) == 0)
  41. return nullptr;
  42. return re;
  43. #else
  44. struct tm *lt = localtime (t);
  45. char time_str[100];
  46. strftime(time_str, 100, format, lt);
  47. return strCopy(time_str);
  48. #endif
  49. }
  50. std::string aFuntool::getTime(time_t *t, const std::string &format) {
  51. time_t tmp;
  52. if (t == nullptr)
  53. t = &tmp;
  54. time (t); // 获取时间戳
  55. #ifdef aFunWIN32_NO_CYGWIN
  56. struct tm lt{};
  57. if (localtime_s(&lt, t) != 0)
  58. return "";
  59. wchar_t time_str[100];
  60. wchar_t *format_ = nullptr;
  61. if (convertWideByte(&format_, format.c_str(), CP_UTF8) == 0)
  62. return "";
  63. wcsftime(time_str, 100, format_, &lt);
  64. free(format_);
  65. char *tmp_ch = nullptr;
  66. if (convertFromWideByte(&tmp_ch, time_str, CP_UTF8) == 0)
  67. return "";
  68. #else
  69. struct tm *lt = localtime (t);
  70. char time_str[100];
  71. strftime(time_str, 100, format.c_str(), lt);
  72. char *tmp_ch = strCopy(time_str);;
  73. #endif
  74. std::string ret = tmp_ch;
  75. free(tmp_ch);
  76. return ret;
  77. }