C ++ strftime()输出错误

时间:2018-04-04 09:33:37

标签: c++ datetime 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

预期产出:

  

2017年9月13日

对我来说没有意义。我做错了什么?

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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