我有这样的:相同mktime()导致了不同的时间字符串
#include <stdio.h>
#include <time.h>
int main()
{
struct tm timeinfo;
strptime("2016-02-18 09:00:00", "%Y-%m-%d %H:%M:%S", &timeinfo);
printf("result 1=%ld\n", mktime(&timeinfo));
strptime("2016-02-18 08:00:00", "%Y-%m-%d %H:%M:%S", &timeinfo);
printf("result 2=%ld\n", mktime(&timeinfo));
}
此MCVE结果让我发疯:
result 1=1455778800
result 2=1455778800
1455778800是UTC时间为2016-02-18 07:00:00
所以这将是纠正第二个日期时间字符串。但为什么我会得到两个不同的字符串相同的结果?
现在这个:
{
struct tm timeinfo;
strptime("2016-02-18 08:00:00", "%Y-%m-%d %H:%M:%S", &timeinfo);
printf("result 2=%ld\n", mktime(&timeinfo));
strptime("2016-02-18 09:00:00", "%Y-%m-%d %H:%M:%S", &timeinfo);
printf("result 1=%ld\n", mktime(&timeinfo));
}
在这里,我有这样的结果:
result 2=1455775200
result 1=1455782400
result 1
现在是正确的,但result 2
是一个小时为时尚早。看起来内部glibc
结构在第一次调用时没有正确初始化。
我将它与另一个glibc
版本链接比系统正在使用。当我将它与系统版本链接时,它就可以工作。我做错了什么?
我无法在OS X上使用铿锵700.1.81复制你的结果。我处于与你不同的时区。你似乎在中欧时间?这可能会导致问题。尝试使用'timegm'而不是'mktime'来消除时区。你可以验证你的时区吗?你也应该手动打印'&timeinfo'来验证'strptime'或'mktime'是否有问题。 – Schwern