【发布时间】:2021-05-17 20:29:27
【问题描述】:
据我了解time_t rawtime = 0xffFFffFF是GMT: Sunday, February 7, 2106 6:28:15 AM
但下面的程序在某些编译器中会带来Thu 1970-01-01 02:59:59 MSK,而在其他编译器中会崩溃。
int main()
{
time_t rawtime = 0xffFFffFF;
struct tm ts;
char buf[80];
ts = *localtime(&rawtime);
strftime(buf, sizeof(buf), "%a %Y-%m-%d %H:%M:%S %Z", &ts);
printf("%s\n", buf);
return 0;
}
rawtime >0x7fFFffFF 时出现错误行为。为什么?如何解决?
更新: 我需要有一系列警报并在时间到来时采取行动。这是嵌入式系统,我无法为复杂的数据类型提供内存和资源。
【问题讨论】:
-
使用具有更大 time_t 的不同编译器?
-
time_t已签名,因此所有高于 0x7fffffff 的值为负数 -
@qrdl 可以签名也可以不签名
-
本地时间崩溃 可能不准确。在取消引用之前没有检查
localtime的返回值这一事实更有可能是导致崩溃的原因。 -
@M.M
time_t通常在大多数平台上都已签名,因此我们有 2038 年的问题