c++ - 奇怪的 mktime 行为 - 如果将返回值分配给变量则更改

标签 c++ timezone mktime

我正在试验一个奇怪的 mktime() 函数行为。当我分配函数返回的值时,输入参数的值为 1,而当我不分配时,该值不同。

我已经知道 mktime() 会调整 struct tm 输入参数的值,但实际情况有所不同,让我们看看具有相应输出的代码:

第一个代码

#include <iostream>
#include <time.h>

using namespace std;

int main(int argc, char** argv) {
    struct tm cT;
    strptime("31/07/2014 16:54:00", "%d/%m/%Y%n%T", &cT);
    mktime(&cT);

    cout << "Current Time: "  << cT.tm_mday << "/" << cT.tm_mon + 1 << "/" << cT.tm_year + 1900 << " " << cT.tm_hour << ":" << cT.tm_min << ":" << cT.tm_sec << endl;

}

输出:

Current Time: 31/7/2014 16:54:0

第二个代码

#include <iostream>
#include <time.h>

using namespace std;

int main(int argc, char** argv) {
    struct tm cT;
    strptime("31/07/2014 16:54:00", "%d/%m/%Y%n%T", &cT);
    time_t t = mktime(&cT);

    cout << "Current Time: "  << cT.tm_mday << "/" << cT.tm_mon + 1 << "/" << cT.tm_year + 1900 << " " << cT.tm_hour << ":" << cT.tm_min << ":" << cT.tm_sec << endl;

}

输出:

Current Time: 31/7/2014 15:54:0

欢迎任何帮助。 :)

最佳答案

这是忘记初始化变量的经典案例。具体来说,您需要为 strptime 不会触及的至少所有字段使用适当的值初始化 cT 变量(strptime 只会设置与格式字符串中的输入字段描述符对应的那些字段。

例如。 :

struct tm cT = { 0 };
cT.tm_isdst = -1;
strptime("31/07/2014 16:54:00", "%d/%m/%Y%n%T", &cT);

关于c++ - 奇怪的 mktime 行为 - 如果将返回值分配给变量则更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25084089/

相关文章:

c++ - 使用 Kruskal 算法查找最小生成树时出现错误

mysql - 通过 django 将时间插入 mysql 数据库时,它存储不同的时间

mysql - 停止在 tz 更改时自动更改 MySQL 中的日期

c++ boost MPI & threading - 序列化错误 : Address not mapped

c++ - 在 qt 中使用 intel 的 tbb

javascript - 模拟浏览器和服务器不同时区进行本地测试

c++ - 使用 <ctime> mktime 的有效日期函数

c++ - 在 C/C++ 中解析 100,000 个 YYYYMMDD.HHMMSS 字符串时 mktime 缓慢

c++ - 为什么使用 mktime 处理指针和非指针时 difftime() 会产生不同的结果?

c++ - -m32 选项不适用于 gcc 但适用于 g++