C语言标准宏__DATE__格式化YY/MM/DD,不能用C语言标准库函数
时间: 2023-10-25 09:22:47 浏览: 114
可以使用以下代码实现:
```
#include <stdio.h>
#define DATE __DATE__
int main()
{
char date[9] = {DATE[7], DATE[8], '/', DATE[0], DATE[1], '/', DATE[4], DATE[5], '\0'};
printf("%s", date);
return 0;
}
```
解释一下代码:
- `__DATE__` 是 C 语言标准宏,表示编译时的日期字符串,格式为 "MMM DD YYYY"。
- `DATE` 宏定义将 `__DATE__` 字符串保存到 `DATE` 变量中。
- `date` 数组用于保存格式化后的日期字符串。
- `DATE` 字符串中第 0、1、4、5、7、8 个字符分别是月、日、年的数字和分隔符。
- 使用数组下标将这些字符提取出来,按照 "YY/MM/DD" 的格式保存到 `date` 数组中。
- 最后使用 `printf` 函数输出格式化后的日期字符串。
注意,这种实现方式假设 `__DATE__` 的格式不会改变,如果改变了,代码可能会出错。
相关问题
C语言标准宏__DATE__格式化YY/MM/DD,不能用库函数
C语言标准宏__DATE__表示当前的日期,格式为"MMM DD YYYY",其中MMM是月份的英文缩写,DD是日期,YYYY是年份。要将其格式化为YY/MM/DD的形式,可以使用以下代码:
```c
#include <stdio.h>
#define MONTH_LEN 3
int main() {
const char* date_str = __DATE__;
char month[MONTH_LEN+1];
int day, year;
// 解析__DATE__中的月份、日期和年份
sscanf(date_str, "%3s %d %d", month, &day, &year);
// 将年份转换为YY格式
year = year % 100;
// 打印格式化后的日期
printf("%02d/%s/%02d\n", year, month, day);
return 0;
}
```
这段代码先使用sscanf函数解析__DATE__中的月份、日期和年份,然后将年份转换为YY格式,并使用printf函数打印出格式化后的日期。注意,这里用到了const char*类型的指针,这是因为__DATE__宏返回的是一个字符串常量。
C语言输入yyyymmdd 格式日期,输出 yyyy 年 mm 月 dd 日格式日期
在C语言中,可以使用标准库函数`scanf`从用户那里获取`yyyymmdd`格式的日期,然后使用`strftime`函数将这个日期格式化为我们所需的`yyyy年mm月dd日`格式。首先,你需要包含`stdio.h`头文件,并导入相应的日期/时间处理函数。
下面是一个简单的例子:
```c
#include <stdio.h>
#include <time.h>
int main() {
char date_input[11]; // 存储输入日期的数组,包括空格
time_t raw_time; // 时间戳
printf("请输入日期(格式: yyyyMMdd): ");
scanf("%s", date_input); // 使用scanf读取输入
// 将输入字符串转换为时间戳
sscanf(date_input, "%d%02d%02d", &raw_time, &raw_time % 100, &raw_time % 100);
// 创建struct tm结构体,用于存储转换后的日期
struct tm *tm_info;
localtime_r(&raw_time, &tm_info);
// 使用strftime将struct tm转换为特定格式的字符串
char output_date[20];
strftime(output_date, sizeof(output_date), "%Y年%m月%d日", tm_info);
printf("格式化的日期是:%s\n", output_date);
return 0;
}
```
在这个程序中,`sscanf`用于解析输入字符串,`localtime_r`用于将时间戳转换为本地时间的struct tm结构体,最后`strftime`根据这个结构体生成我们想要的输出格式。
阅读全文