C语言标准宏__DATE__格式化YY/MM/DD,不能用C语言标准库函数
时间: 2023-10-02 07:06:21 浏览: 101
可以使用以下代码实现:
```
#include<stdio.h>
#define YEAR (__DATE__[7]=='9'&&__DATE__[8]=='9'?0:\
__DATE__[7]=='0'&&__DATE__[8]=='0'?100:\
__DATE__[7]=='1'&&__DATE__[8]=='9'?200:\
__DATE__[7]=='2'&&__DATE__[8]=='9'?300:0)
#define MONTH (__DATE__[0]=='J'&&__DATE__[1]=='a'&&__DATE__[2]=='n'?1:\
__DATE__[0]=='F'&&__DATE__[1]=='e'&&__DATE__[2]=='b'?2:\
__DATE__[0]=='M'&&__DATE__[1]=='a'&&__DATE__[2]=='r'?3:\
__DATE__[0]=='A'&&__DATE__[1]=='p'&&__DATE__[2]=='r'?4:\
__DATE__[0]=='M'&&__DATE__[1]=='a'&&__DATE__[2]=='y'?5:\
__DATE__[0]=='J'&&__DATE__[1]=='u'&&__DATE__[2]=='n'?6:\
__DATE__[0]=='J'&&__DATE__[1]=='u'&&__DATE__[2]=='l'?7:\
__DATE__[0]=='A'&&__DATE__[1]=='u'&&__DATE__[2]=='g'?8:\
__DATE__[0]=='S'&&__DATE__[1]=='e'&&__DATE__[2]=='p'?9:\
__DATE__[0]=='O'&&__DATE__[1]=='c'&&__DATE__[2]=='t'?10:\
__DATE__[0]=='N'&&__DATE__[1]=='o'&&__DATE__[2]=='v'?11:\
__DATE__[0]=='D'&&__DATE__[1]=='e'&&__DATE__[2]=='c'?12:0)
#define DAY (__DATE__[4]==' '?__DATE__[5]-'0':(__DATE__[4]-'0')*10+(__DATE__[5]-'0'))
int main()
{
printf("%d/%02d/%02d\n", YEAR, MONTH, DAY);
return 0;
}
```
在上述代码中,我们首先定义了三个宏,YEAR、MONTH和DAY,分别用于获取年、月和日的值。
YEAR宏的定义中,我们根据__DATE__宏的格式,判断年份是19xx年、20xx年还是21xx年,并将其转换为对应的数值。
MONTH宏的定义中,我们根据__DATE__宏的格式,判断月份的字符串,将其转换为对应的数值。
DAY宏的定义中,我们从__DATE__宏的格式中获取日的数值。
最后,在main函数中,我们使用printf函数将年、月、日按照YY/MM/DD的格式输出。由于月和日的数值可能只有一位,因此我们使用%02d格式化输出,保证输出的数值始终占据两位。
阅读全文