C++ strftime() неверный вывод

#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

Это не имеет никакого смысла для меня. Что я сделал не так?

3 ответа

Решение

struct tm в corecrt_wtime.h имеет следующие комментарии рядом с его членами.

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

std::tmУчастники не все принимают необработанные значения даты, см. http://en.cppreference.com/w/cpp/chrono/c/tm

tm_myear это годы с 1900 года и tm_mon использует 0 для января

tm_year количество лет после 1900 года.
tm_mon месяц внутри года, в котором январь соответствует 0,

Другие вопросы по тегам