У меня есть это:же указываете ей() приводят к различным даты и времени строки
#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
, чем использует система. Когда я связываю его с версией системы, он работает. Что я сделал не так?
Я не могу воспроизвести ваш результат, используя clang 700.1.81 на OS X. Я в другом часовом поясе от вас. Вы, кажется, в центральноевропейское время? Возможно, это может вызвать проблемы. Попробуйте 'timegm' вместо' mktime', чтобы исключить часовые пояса как возможность. Не могли бы вы подтвердить свой часовой пояс? Также вы должны распечатать '& timeinfo' вручную, чтобы проверить, не виноват ли' strptime' или 'mktime'. – Schwern