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
,