2010-09-16 6 views
0

J'écris du code pour me donner un historique des dernières commandes écrites dans un shell, y compris l'heure, au format heure: minutes.Problème de calcul de l'heure du jour en utilisant time()

Je le code suivant:

// 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]); 

je stocke le temps comme dans les domaines suivants:

time_t history_time[MAX_HISTORY_SIZE]; 

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

L'heure se trouve être mal, mais je ne sais pas pourquoi. J'utilise Solaris.

La sortie est la suivante:

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

Les minutes sont corrects, mais pas l'heure. Lorsque vous tapez "date" dans la ligne de commande, je reçois: "jeu 16 septembre 14:29:55 EDT 2010", donc même minutes mais heure différente.

Je ne suis pas sûr s'il s'agit de mon code ou de la fonction time() dans Solaris? Peut-être que la date n'utilise pas la fonction time(), je ne suis pas sûr.

Quelqu'un a-t-il une solution?

Merci beaucoup,

Jary

+0

Vous vous rendez compte que time() donne l'heure ou les secondes du calendrier "UTC" depuis l'époque (1er janvier 1970 00:00:00)? Cela signifie que l'heure que vous regardez sera décalée de vos paramètres régionaux d'un montant prévisible (votre décalage par rapport au méridien UTC). Est-ce pas le problème? –

Répondre

0

time() retourne l'heure UTC, vous devez prendre votre décalage par rapport à ce compte. Ou utilisez simplement une fonction de formatage de l'heure asctime après avoir converti UTC en local avec localtime().

+0

Merci beaucoup, j'ai complètement oublié l'heure UTC (et GMT), ça a du sens maintenant. Merci beaucoup! – Jary

+0

localtime() a résolu mon problème! Merci beaucoup! – Jary