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
相关产品推荐
相关产品推荐

