gpt4 book ai didi

c++ - 当给定一个有效的 struct tm 时,mktime 返回 -1

转载 作者:可可西里 更新时间:2023-11-01 16:29:18 25 4
gpt4 key购买 nike

#include <stdio.h>
#include <time.h>

int main(int argc, char* argv[])
{
struct tm stm;
stm.tm_sec = 27;
stm.tm_min = 5;
stm.tm_hour = 18;
stm.tm_mday = 2;
stm.tm_mon = 0;
stm.tm_year = 43;
stm.tm_wday = 0;
stm.tm_yday = 0;
printf("%d\n", mktime(&stm));
getchar();
return 0;
}

打印-1

我误会了什么?

[+edit] 这是使用具有 32 位目标的 Visual Studio 2012。我想后续问题是“存储任意日期/时间值(即可能在 1900 年之前的值)的推荐方法是什么?”

最佳答案

在您的案例中,43 (1943) 被视为无效年份。原因是 mktime 返回一个 time_t 类型。这种类型并不是真正标准化的。文件说了什么:

The time_t type is an integral value representing the number of seconds elapsed since 00:00 hours, Jan 1, 1970 UTC. And tm_year is the number of years since 1900

此链接What is ultimately a time_t typedef to?说:

time_t represents the number of seconds since the start of the Unix epoch: midnight UTC of January 1, 1970 (not counting leap seconds). Some systems correctly handle negative time values, while others do not.

如果我们认为 time_t 是一个带符号的 32 位整数,在最佳情况下,您可以在 ~ 13/12/1901 和 19/1/2038 之间创建日期

但是在您的情况下,实现不使用 time_t 的负数部分,因此您不能使用 mktime 创建 1970 年之前的日期。

关于c++ - 当给定一个有效的 struct tm 时,mktime 返回 -1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14127013/

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