C语言中localtime()函数返回日期错误的问题排查
问题分析与修复:localtime()输出时间格式错误
你的代码存在两个关键错误,导致输出不符合预期:
- 月份数值未修正:
struct tm结构体中的tm_mon成员是从0开始计数的(0对应1月,1对应2月,以此类推,11对应12月),直接输出会比实际月份少1。 - 日期与月份的输出顺序颠倒:你预期格式是
mm/dd/yyyy(月/日/年),但代码中printf的参数顺序先传了tm_mday(日),再传tm_mon,导致日和月的位置互换。
修复后的代码如下:
#include <time.h> #include <stdio.h> int main(void) { time_t rawtime = time(NULL); struct tm *ptime = localtime(&rawtime); printf("The time is: %02d/%02d/%04d %02d:%02d:%02d\n", ptime->tm_mon + 1, ptime->tm_mday, ptime->tm_year + 1900, ptime->tm_hour, ptime->tm_min, ptime->tm_sec); return 0; }
修复说明
- 将
ptime->tm_mon改为ptime->tm_mon + 1,修正月份的数值偏差; - 调换
ptime->tm_mday和ptime->tm_mon + 1的顺序,匹配mm/dd/yyyy的输出格式。
内容的提问来源于stack exchange,提问作者moisedk
相关产品推荐
相关产品推荐

