Ошибка расчета времени суток с использованием времени () - PullRequest
0 голосов
/ 16 сентября 2010

Я пишу некоторый код, чтобы дать мне историю последних команд, написанных в оболочке, включая время в формате час: минуты.

У меня есть следующий код:

// Modulo by 86400, number of seconds in a day
int totalSeconds = history_time[i] % 86400;
int hours = totalSeconds / 3600;
int minutes = (totalSeconds % 3600) / 60;    

printf("%d %d:%d %s\n", count+1, hours, minutes, history[i]);

Я сохраняю время следующим образом:

time_t history_time[MAX_HISTORY_SIZE];

// Store the time
time_t t = time(NULL);
history_time[history_index] = t;

Час, кажется, неправильный, но я не уверен, почему.Я использую Solaris.

Вывод следующий:

1 18:29 ls
2 18:29 cd
3 18:29 ls -al | grep test

Минуты правильные, но не час.При вводе «date» в командной строке я получаю: «Thu Sep 16 14:29:55 EDT 2010», то есть те же минуты, но разные часы.

Я не уверен, имеет ли это отношение к моему кодуили с помощью функции time () в Solaris?Может быть, дата не использует функцию time (), я не уверен.

У кого-нибудь есть решение?

Большое спасибо,

Jary

1 Ответ

0 голосов
/ 16 сентября 2010

time () возвращает время UTC, вы должны принять во внимание ваше смещение. Или просто используйте функцию форматирования времени asctime после преобразования UTC в местное с помощью localtime ().

...