Функции gmtime
и localtime
возвращают указатель на фиксированный буфер. Похоже, что в вашей реализации они используют один и тот же буфер, поэтому вызов gmtime
заполняет этот буфер, а затем вызов localtime
заполняет этот буфер другими данными.
Если у вас есть gmtime_r
и localtime_r
, используйте их. (Возможно, вам придется включить строку #define _POSIX_SOURCE
или что-то подобное перед #include <time.h>
). Вам нужно будет выделить память для двух struct tm
объектов.
struct tm local_tm, gm_tm;
time(&iTime);
gmtime_r(&iTime, &gm_tm);
localtime_r(&iTime, &local_tm);
В старых системах нет версий _r
(они были добавлены, потому что простые версии не могут быть легко использованы в многопоточной программе). Затем вам необходимо скопировать данные перед следующим вызовом к любой из двух функций.
struct tm local_tm, gm_tm;
time(&iTime);
memcpy(&gm_tm, gmtime(&iTime), sizeof(gm_tm));
memcpy(&local_tm, localtime(&iTime), sizeof(local_tm));