build_date_time.h 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. /**
  2. * @file build_date_time.h
  3. * @brief 处理宏 __DATE__ 和 __TIME__.
  4. * @author Leopard-C (leopard.c@outlook.com)
  5. * @version 0.1
  6. * @date 2023-05-22
  7. *
  8. * @copyright Copyright (c) 2023-present, Jinbao Chen.
  9. */
  10. #ifndef IC_MACRO_BUILD_DATE_TIME_H_
  11. #define IC_MACRO_BUILD_DATE_TIME_H_
  12. #include <stdio.h>
  13. #include <time.h>
  14. // Example of __DATE__ string: "May 22 2023"
  15. // 01234567890
  16. #define BUILD_YEAR_CH0 (__DATE__[ 7])
  17. #define BUILD_YEAR_CH1 (__DATE__[ 8])
  18. #define BUILD_YEAR_CH2 (__DATE__[ 9])
  19. #define BUILD_YEAR_CH3 (__DATE__[10])
  20. #define BUILD_MONTH_IS_JAN (__DATE__[0] == 'J' && __DATE__[1] == 'a' && __DATE__[2] == 'n')
  21. #define BUILD_MONTH_IS_FEB (__DATE__[0] == 'F')
  22. #define BUILD_MONTH_IS_MAR (__DATE__[0] == 'M' && __DATE__[1] == 'a' && __DATE__[2] == 'r')
  23. #define BUILD_MONTH_IS_APR (__DATE__[0] == 'A' && __DATE__[1] == 'p')
  24. #define BUILD_MONTH_IS_MAY (__DATE__[0] == 'M' && __DATE__[1] == 'a' && __DATE__[2] == 'y')
  25. #define BUILD_MONTH_IS_JUN (__DATE__[0] == 'J' && __DATE__[1] == 'u' && __DATE__[2] == 'n')
  26. #define BUILD_MONTH_IS_JUL (__DATE__[0] == 'J' && __DATE__[1] == 'u' && __DATE__[2] == 'l')
  27. #define BUILD_MONTH_IS_AUG (__DATE__[0] == 'A' && __DATE__[1] == 'u')
  28. #define BUILD_MONTH_IS_SEP (__DATE__[0] == 'S')
  29. #define BUILD_MONTH_IS_OCT (__DATE__[0] == 'O')
  30. #define BUILD_MONTH_IS_NOV (__DATE__[0] == 'N')
  31. #define BUILD_MONTH_IS_DEC (__DATE__[0] == 'D')
  32. #define BUILD_MONTH_CH0 \
  33. ((BUILD_MONTH_IS_OCT || BUILD_MONTH_IS_NOV || BUILD_MONTH_IS_DEC) ? '1' : '0')
  34. #define BUILD_MONTH_CH1 \
  35. ( \
  36. (BUILD_MONTH_IS_JAN) ? '1' : \
  37. (BUILD_MONTH_IS_FEB) ? '2' : \
  38. (BUILD_MONTH_IS_MAR) ? '3' : \
  39. (BUILD_MONTH_IS_APR) ? '4' : \
  40. (BUILD_MONTH_IS_MAY) ? '5' : \
  41. (BUILD_MONTH_IS_JUN) ? '6' : \
  42. (BUILD_MONTH_IS_JUL) ? '7' : \
  43. (BUILD_MONTH_IS_AUG) ? '8' : \
  44. (BUILD_MONTH_IS_SEP) ? '9' : \
  45. (BUILD_MONTH_IS_OCT) ? '0' : \
  46. (BUILD_MONTH_IS_NOV) ? '1' : \
  47. (BUILD_MONTH_IS_DEC) ? '2' : \
  48. /* error default */ '?' \
  49. )
  50. #define BUILD_DAY_CH0 ((__DATE__[4] >= '0') ? (__DATE__[4]) : '0')
  51. #define BUILD_DAY_CH1 (__DATE__[ 5])
  52. // Example of __TIME__ string: "01:38:46"
  53. // 01234567
  54. #define BUILD_HOUR_CH0 (__TIME__[0])
  55. #define BUILD_HOUR_CH1 (__TIME__[1])
  56. #define BUILD_MIN_CH0 (__TIME__[3])
  57. #define BUILD_MIN_CH1 (__TIME__[4])
  58. #define BUILD_SEC_CH0 (__TIME__[6])
  59. #define BUILD_SEC_CH1 (__TIME__[7])
  60. // DateTime. Example: 2022-05-22 01:38:46
  61. #define BUILD_DATE_TIME \
  62. {\
  63. BUILD_YEAR_CH0, BUILD_YEAR_CH1, BUILD_YEAR_CH2, BUILD_YEAR_CH3,\
  64. '-',\
  65. BUILD_MONTH_CH0, BUILD_MONTH_CH1,\
  66. '-',\
  67. BUILD_DAY_CH0, BUILD_DAY_CH1,\
  68. ' ',\
  69. BUILD_HOUR_CH0, BUILD_HOUR_CH1,\
  70. ':',\
  71. BUILD_MIN_CH0, BUILD_MIN_CH1,\
  72. ':',\
  73. BUILD_SEC_CH0, BUILD_SEC_CH1,\
  74. '\0'\
  75. }
  76. extern const char g_build_date_time[];
  77. extern time_t g_build_timestamp;
  78. #endif // IC_MACRO_BUILD_DATE_TIME_H_