如何实现带前导零的dd-mm-yyyy日期格式及日月拼接格式?
解决日期格式化带前导零的问题
一、获取「日+月」格式(如0301)的字符串
直接用标准库的strftime函数是最简洁可靠的方式,它会自动处理前导零,不用手动拼接或修改字符串:
#include <time.h> #include <stdio.h> int main() { // 获取当前时间戳 time_t current_time = time(NULL); // 转换为本地时间的tm结构体 struct tm *local_tm = localtime(¤t_time); // 存储格式为DDMM的字符串,缓冲区留足结束符空间 char ddmm_str[5]; // %d是两位带前导零的日,%m是两位带前导零的月 strftime(ddmm_str, sizeof(ddmm_str), "%d%m", local_tm); // 此时ddmm_str就是"0301"这类格式,可直接存变量使用 printf("%s\n", ddmm_str); return 0; }
如果你非要手动处理(不推荐),可以用sprintf格式化单个日/月,再拼接:
char day_str[3], mon_str[3], ddmm_str[5]; // %02d表示输出两位整数,不足时自动补前导零 sprintf(day_str, "%02d", local_tm->tm_mday); sprintf(mon_str, "%02d", local_tm->tm_mon + 1); // tm_mon是0-11,要加1才是实际月份 strcpy(ddmm_str, day_str); strcat(ddmm_str, mon_str);
注意:
itoa不是C标准函数,不同编译器实现可能有差异,不建议跨平台使用。
二、输出dd-mm-yyyy格式的日期
同样用strftime,指定对应的格式符即可:
char full_date[11]; // dd-mm-yyyy共10个字符,加结束符需要11位缓冲区 strftime(full_date, sizeof(full_date), "%d-%m-%Y", local_tm); printf("%s\n", full_date); // 输出示例:03-01-2024
内容的提问来源于stack exchange,提问作者Ascedant
相关产品推荐
相关产品推荐

