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
#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