У меня есть это:
#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
, чем система использует. Когда я связываю его с версией системы, он работает. Что я сделал не так?
timegm
вместоmktime
, чтобы исключить возможность часовых поясов. Не могли бы вы подтвердить свой часовой пояс? Также вы должны распечатать&timeinfo
вручную, чтобы проверить, виноват лиstrptime
илиmktime
. - person Schwern   schedule 19.02.2016