C语言标准宏__DATE__格式化YY/MM/DD
时间: 2023-08-27 21:05:06 浏览: 178
C语言标准宏__DATE__的格式为"Mon DD YYYY",无法直接用YY/MM/DD格式化。但是可以通过字符串操作将其转换成YY/MM/DD格式。
以下是一个示例代码:
```c
#include <stdio.h>
#include <string.h>
int main() {
char date[] = __DATE__;
char year[5], month[3], day[3];
// 将字符串拆分成年、月、日三个部分
sscanf(date, "%s %s %s", month, day, year);
// 将年份转换成两位数
year[2] = '\0';
year[3] = year[2];
year[2] = year[1];
year[1] = year[0];
year[0] = '0';
// 输出格式化后的日期
printf("%s/%s/%s\n", year, month, day);
return 0;
}
```
输出结果为"21/09/28",表示2021年9月28日。
相关问题
C语言标准宏__DATE__格式化YY/MM/DD的驱动
#include <stdio.h>
#include <time.h>
int main() {
time_t t = time(NULL);
struct tm tm = *localtime(&t);
printf("%02d/%02d/%02d\n", tm.tm_year % 100, tm.tm_mon + 1, tm.tm_mday);
return 0;
}
C语言标准宏__DATE__格式化YY/MM/DD,不能用C语言标准库函数
可以利用预处理器的字符串拼接和截取功能来实现:
```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个字符处。
- 最后把年、月、日拼接起来,得到格式化后的日期字符串。
阅读全文