You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++ strftime()输出异常咨询:为何输出13.10.3917而非13.09.2017

问题分析与解决

你遇到的问题其实是对C++中tm结构体的成员规则不熟悉导致的,我来给你拆解清楚:

  • 关于tm_year:这个成员存储的是从1900年开始的偏移量,不是直接存储年份数值。你写的date.tm_year = 2017,相当于表示1900+2017=3917年,这就是输出年份变成3917的原因。正确写法应该是date.tm_year = 2017 - 1900;也就是117。

  • 关于tm_mon:这个成员是从0开始计数的,0代表1月,1代表2月……以此类推,9对应的是10月,这就是输出月份是10的原因。如果要设置9月,应该写date.tm_mon = 8;。

修正后的代码如下:

#include <ctime>
#include <iostream>
using namespace std;
int main() {
    char dateStringBuffer[256] = "";
    tm date;
    date.tm_year = 2017 - 1900; // 正确的年份偏移量
    date.tm_mon = 8; // 0对应1月,8对应9月
    date.tm_mday = 13;
    strftime(dateStringBuffer, 256, "%d.%m.%Y", &date);
    cout << dateStringBuffer;
}

运行这段代码就能得到你预期的13.09.2017啦。

内容的提问来源于stack exchange,提问作者KOB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:36:01