2009-02-26 9 views
0

j'ai essayé strftime() pour obtenir un horodatage formaté.strftime() ne pas afficher les secondes correctement

char ft[ 256 ]; 
struct tm *tmp; 
strftime(ft, 256, "%D - %T", tmp); 

Mon problème est que j'obtiens "13/02/60 - 03: 07: -17958194" comme résultat. Y a-t-il un moyen d'afficher les secondes correctement? (Je suis sous Mac OS X et gcc)

+0

@ Brian: Le temps en notation de 24 heures (% H:% M:% S) –

+0

Qu'est-ce que le% S% S% S% S? ne devrait-il pas s'agir d'un seul% S? Votre sortie a également un supplément:. Est-ce la sortie réelle? –

+0

« % S% S% S% S » Je aurais dû lire mon code avant de le coller de mon éditeur. C'est la sortie réelle si vous supprimez cette partie. – Nino

Répondre

7

Vous utilisez une valeur non initialisée dans le code que vous avez posté, ce qui expliquerait pourquoi vous avez ce problème. Les résultats de code suivant dans ce que vous cherchez:

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

int 
main(int argc, char *argv[]) { 
    char ft[256]; 
    struct tm *tmp; 
    time_t curtime; 

    time(&curtime); 
    tmp = localtime(&curtime); 

    strftime(ft, 256, "%D - %T %s", tmp); 
    printf("%s\n", ft); 

    return(0); 
} 

Ensuite, compiler et exécuter l'exemple:

cc -o time_ex time_ex.c 
./time_ex 
02/26/09 - 11:26:34 1235665594 

ETA: Baisse% s si vous voulez juste l'heure locale sans UNIX temps après, bien sûr.

0

Vous n'initialisez pas struct tm *tmp; avec quoi que ce soit - pourriez-vous poster un exemple complet?

+0

C'était l'exemple complet, je ne savais pas comment l'initialiser. – Nino

3

"% D -% T" devrait vous donner des résultats appropriés, en supposant que vous voulez "mm/jj/aa - hh: mm: ss".

Si votre exemple est précis à votre utilisation, vous voudrez peut-être envisager de donner la fonction en temps réel au lieu d'une adresse aléatoire dans la mémoire.

1

% s et% S sont différents caractères de formatage.

  • % s est le nombre de secondes écoulé depuis l'époque unix.
  • % S est la valeur de l'heure courante secondes (00-60) avec un 0 pour les nombres < 10.
+0

Hah, ouah. Je dois changer ma police monospace. En un coup d'oeil dans ma police actuelle, lower-s et upper-s sont presque indiscernables. Meh. Je n'ai pas pensé à regarder à nouveau jusqu'à ce que tu aies posté ceci. Merci quand même. –