我有這樣的:相同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