gpt4 book ai didi

c++ - vc++ mktime 弄错月数

转载 作者:行者123 更新时间:2023-11-30 04:26:29 24 4
gpt4 key购买 nike

我无法弄清楚我在以下代码中犯了什么错误,但使用 visual c++ 2010 sp1,我在下面粘贴的代码结果显示了一个月的错误。

struct tm timeStamp;
timeStamp.tm_year = 2012 - 1900;
timeStamp.tm_mon = 7;
timeStamp.tm_mday = 19;
timeStamp.tm_hour = 20;
timeStamp.tm_min = 55;
timeStamp.tm_sec = 22;
timeStamp.tm_isdst = -1;


time_t time_val = mktime(&timeStamp);

const int buff_size = 20;
char buff[buff_size] = {0};
strftime(buff, buff_size, "%Y-%m-%d %H:%M:%S", localtime( &time_val ));


cout << "Original time:\t"
<< timeStamp.tm_year + 1900 << "-" << timeStamp.tm_mon << "-" << timeStamp.tm_mday << " "
<< timeStamp.tm_hour << ":" << timeStamp.tm_min << ":" << timeStamp.tm_sec << endl;
cout << "Converted time:\t" << buff << endl;

我编译时这段代码的输出结果是:

Original time:  2012-7-19 20:55:22
Converted time: 2012-08-19 20:55:22

最佳答案

struct tmtm_mon 字段来自 0-11,其中 0 == January 和 11 == December。 strftime 知道这一点并在内部进行补偿。你的 cout 没有对此进行补偿。

C++ Reference struct tm 的页面包含所有值范围的定义。

关于c++ - vc++ mktime 弄错月数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11565543/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com