C语言标准宏__DATE__格式化YY/MM/DD,不能用C语言标准库函数
时间: 2023-10-02 22:06:20 浏览: 68
日期格式化函数
可以利用预处理器的字符串拼接和截取功能来实现:
```c
#define STR_HELPER(x) #x
#define STR(x) STR_HELPER(x)
#define YY_STR STR(__DATE__[7]) STR(__DATE__[8])
#define MM_STR \
(__DATE__[0] == 'J' && __DATE__[1] == 'a') ? "01" : \
(__DATE__[0] == 'F') ? "02" : \
(__DATE__[0] == 'M' && __DATE__[2] == 'r') ? "03" : \
(__DATE__[0] == 'A' && __DATE__[1] == 'p') ? "04" : \
(__DATE__[0] == 'M') ? "05" : \
(__DATE__[0] == 'J' && __DATE__[2] == 'n') ? "06" : \
(__DATE__[0] == 'J' && __DATE__[2] == 'l') ? "07" : \
(__DATE__[0] == 'A' && __DATE__[1] == 'u') ? "08" : \
(__DATE__[0] == 'S') ? "09" : \
(__DATE__[0] == 'O') ? "10" : \
(__DATE__[0] == 'N') ? "11" : "12"
#define DD_STR STR(__DATE__[4]) STR(__DATE__[5])
const char* date = YY_STR "/" MM_STR "/" DD_STR;
```
解释一下:
- `STR_HELPER` 和 `STR` 宏用于把宏参数转化为字符串,例如 `STR(123)` 会被展开为 `"123"`。
- `YY_STR` 宏用于取出年份的后两位,由于 `__DATE__` 的格式为 `"Mmm dd yyyy"`,所以年份的后两位在第7和第8个字符处。
- `MM_STR` 宏用于取出月份,根据 `__DATE__` 的第一个字符和第三个字符可以判断月份,例如 `__DATE__[0] == 'J' && __DATE__[1] == 'a'` 就表示一月。具体的月份判断可以参考代码中的实现。
- `DD_STR` 宏用于取出日期,由于 `__DATE__` 的格式为 `"Mmm dd yyyy"`,所以日期的位置在第4和第5个字符处。
- 最后把年、月、日拼接起来,得到格式化后的日期字符串。
阅读全文