C++ strftime() 不正确的输出

C++ strftime() incorrect output

#include <ctime>
#include <iostream>

using namespace std;

int main()
{
    char dateStringBuffer[256] = "";
    tm date;

    date.tm_year = 2017;
    date.tm_mon = 9;
    date.tm_mday = 13;

    strftime(dateStringBuffer, 256, "%d.%m.%Y", &date);
    cout << dateStringBuffer;
}

输出为:

13.10.3917

预期输出:

13.09.2017

这对我来说毫无意义。我做错了什么?

std::tm 的成员并不都采用原始日期值,请参阅 http://en.cppreference.com/w/cpp/chrono/c/tm

tm_myear 是自 1900 年以来的年份,tm_mon 使用 0 表示一月

tm_year是1900年之后的年数。
tm_mon 是一年中一月对应 0 的月份。

corecrt_wtime.h 中的 struct tm 在其成员旁边有以下评论。

int tm_mon;   // months since January - [0, 11]
int tm_year;  // years since 1900

这意味着你应该做这样的事情:

date.tm_year = 117;
date.tm_mon = 8;
date.tm_mday = 13;

这将为您提供预期的输出:13.09.2017