| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- /**
- * @file build_date_time.h
- * @brief 处理宏 __DATE__ 和 __TIME__.
- * @author Leopard-C (leopard.c@outlook.com)
- * @version 0.1
- * @date 2023-05-22
- *
- * @copyright Copyright (c) 2023-present, Jinbao Chen.
- */
- #ifndef IC_MACRO_BUILD_DATE_TIME_H_
- #define IC_MACRO_BUILD_DATE_TIME_H_
- #include <stdio.h>
- #include <time.h>
- // Example of __DATE__ string: "May 22 2023"
- // 01234567890
- #define BUILD_YEAR_CH0 (__DATE__[ 7])
- #define BUILD_YEAR_CH1 (__DATE__[ 8])
- #define BUILD_YEAR_CH2 (__DATE__[ 9])
- #define BUILD_YEAR_CH3 (__DATE__[10])
- #define BUILD_MONTH_IS_JAN (__DATE__[0] == 'J' && __DATE__[1] == 'a' && __DATE__[2] == 'n')
- #define BUILD_MONTH_IS_FEB (__DATE__[0] == 'F')
- #define BUILD_MONTH_IS_MAR (__DATE__[0] == 'M' && __DATE__[1] == 'a' && __DATE__[2] == 'r')
- #define BUILD_MONTH_IS_APR (__DATE__[0] == 'A' && __DATE__[1] == 'p')
- #define BUILD_MONTH_IS_MAY (__DATE__[0] == 'M' && __DATE__[1] == 'a' && __DATE__[2] == 'y')
- #define BUILD_MONTH_IS_JUN (__DATE__[0] == 'J' && __DATE__[1] == 'u' && __DATE__[2] == 'n')
- #define BUILD_MONTH_IS_JUL (__DATE__[0] == 'J' && __DATE__[1] == 'u' && __DATE__[2] == 'l')
- #define BUILD_MONTH_IS_AUG (__DATE__[0] == 'A' && __DATE__[1] == 'u')
- #define BUILD_MONTH_IS_SEP (__DATE__[0] == 'S')
- #define BUILD_MONTH_IS_OCT (__DATE__[0] == 'O')
- #define BUILD_MONTH_IS_NOV (__DATE__[0] == 'N')
- #define BUILD_MONTH_IS_DEC (__DATE__[0] == 'D')
- #define BUILD_MONTH_CH0 \
- ((BUILD_MONTH_IS_OCT || BUILD_MONTH_IS_NOV || BUILD_MONTH_IS_DEC) ? '1' : '0')
- #define BUILD_MONTH_CH1 \
- ( \
- (BUILD_MONTH_IS_JAN) ? '1' : \
- (BUILD_MONTH_IS_FEB) ? '2' : \
- (BUILD_MONTH_IS_MAR) ? '3' : \
- (BUILD_MONTH_IS_APR) ? '4' : \
- (BUILD_MONTH_IS_MAY) ? '5' : \
- (BUILD_MONTH_IS_JUN) ? '6' : \
- (BUILD_MONTH_IS_JUL) ? '7' : \
- (BUILD_MONTH_IS_AUG) ? '8' : \
- (BUILD_MONTH_IS_SEP) ? '9' : \
- (BUILD_MONTH_IS_OCT) ? '0' : \
- (BUILD_MONTH_IS_NOV) ? '1' : \
- (BUILD_MONTH_IS_DEC) ? '2' : \
- /* error default */ '?' \
- )
- #define BUILD_DAY_CH0 ((__DATE__[4] >= '0') ? (__DATE__[4]) : '0')
- #define BUILD_DAY_CH1 (__DATE__[ 5])
- // Example of __TIME__ string: "01:38:46"
- // 01234567
- #define BUILD_HOUR_CH0 (__TIME__[0])
- #define BUILD_HOUR_CH1 (__TIME__[1])
- #define BUILD_MIN_CH0 (__TIME__[3])
- #define BUILD_MIN_CH1 (__TIME__[4])
- #define BUILD_SEC_CH0 (__TIME__[6])
- #define BUILD_SEC_CH1 (__TIME__[7])
- // DateTime. Example: 2022-05-22 01:38:46
- #define BUILD_DATE_TIME \
- {\
- BUILD_YEAR_CH0, BUILD_YEAR_CH1, BUILD_YEAR_CH2, BUILD_YEAR_CH3,\
- '-',\
- BUILD_MONTH_CH0, BUILD_MONTH_CH1,\
- '-',\
- BUILD_DAY_CH0, BUILD_DAY_CH1,\
- ' ',\
- BUILD_HOUR_CH0, BUILD_HOUR_CH1,\
- ':',\
- BUILD_MIN_CH0, BUILD_MIN_CH1,\
- ':',\
- BUILD_SEC_CH0, BUILD_SEC_CH1,\
- '\0'\
- }
- extern const char g_build_date_time[];
- extern time_t g_build_timestamp;
- #endif // IC_MACRO_BUILD_DATE_TIME_H_
|