time, gmtime, localtime (Как-то непонятно работает.)

Модератор: Модераторы разделов

Аватара пользователя
Zeus
Сообщения: 694

time, gmtime, localtime

Сообщение Zeus »

#include <time.h>

Получаю текущее время time (time_t*);
Отдаю полученное значение gmtime - получить гринвичское время.
Это же значение отдаю localtime - получить локальное время.
Они получаются ОДИНАКОВЫЕ.

В то же время если выполнить в консоли команду date --utc и просто date - результаты разные.

Мне искать какую-то глупую ошибку в коде или такое может быть?


Спасибо.
Спасибо сказали:
Аватара пользователя
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус

Re: time, gmtime, localtime

Сообщение KiWi »

Код: Выделить всё

#include <time.h>
#include <stdio.h>

int main() {
        time_t t;
        struct tm *tmp;
        char str[512];
        time(&t);

        tmp = localtime(&t);
        strftime(str, sizeof(str), "%Y-%m-%d %H:%M:%S", tmp);
        printf("%s\n", str);

        tmp = gmtime(&t);
        strftime(str, sizeof(str), "%Y-%m-%d %H:%M:%S", tmp);
        printf("%s\n", str);

        printf("%s\n", tzname[0]);
        return 0;
}

Try...
Интересна, вообщем, последняя строчка.
Спасибо сказали:
Аватара пользователя
Zeus
Сообщения: 694

Re: time, gmtime, localtime

Сообщение Zeus »

Спасибо.
Разобрался.

Дело было вот в чём:
у меня в коде для возвращаемых ф-ями gmtime и localtime указателей было заведено две отдельных переменных.
Я сначала последовательными вызовами функций присваивал этим указателям значения, а потом начинал забирать данные.

В man'е написано, что функции возвращают указатель на статическую область памяти.
Но я не знал, что НА ОДНУ И ТУ ЖЕ!
Т.е. фактически я получал данные только последней вызванной функции.

Такое вот у меня состоялось личное открытие :)
Спасибо сказали: