J'écris une fonction qui, entre autres choses, doit imprimer un compteur de temps écoulé. Il reçoit par référence une heure de début _start
, et la compare à current
, les deux étant tapés time_t
. Je veux utiliser strftime()
pour imprimer le delta de temps observé au format ISO 8601. Voici ce que je tentais de le faire:Temps écoulé formaté en C
// Negative start time implies program has not begun
if (*_start > 0) {
time_t elapsed = current - *_start;
strftime(time_str, sizeof(time_str) - 1, "%T", localtime(&elapsed));
printf("%s\n", time_str);
}
Et voici la sortie que je reçois immédiatement après l'exécution du programme
01:00:00
01:00:00
01:00:01
01:00:01
01:00:01
Les secondes fonctionnent très bien, si je laisse courir plus ils incrémentée comme prévu, alors faites les minutes, cependant l'heure commence comme 01 par opposition à 00. Pourquoi cela se produit-il? Comment puis-je commencer à zéro les heures, comme les minutes?
En utilisant 'localtime' vous vraiment obtenir la date depuis minuit 1 janvier 1970 * dans votre région fuseau horaire*. Par exemple, ici sur la côte ouest des États-Unis si 'elapsed_time = 0' alors' strftime' dit 16:00:00 parce que 'localtime (0)' est ici 'Wed Dec 31 16:00:00 1969'. Je suppose que vous êtes en Europe continentale. Vous utiliseriez 'gmtime' à la place, mais cela ne fonctionnerait que jusqu'à 24 heures. – Schwern