2009-02-26 6 views
0

Ich habe versucht, strftime() einen formatierten Zeitstempel zu erhalten.strftime() zeigt die Sekunden nicht korrekt an

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

Mein Problem ist, dass ich "13/02/60 - 03: 07: -17958194" als Ergebnis bekomme. Gibt es eine Möglichkeit, die Sekunden richtig anzuzeigen? (Ich verwende Mac OS X und gcc)

+0

@ Brian ist: Die Zeit im 24-Stunden-Notation (% H:% M:% S) –

+0

Was ist mit% S% S% S% S? sollte das nicht nur ein einziges% S sein? Ihre Ausgabe hat auch ein Extra:. Ist das der tatsächliche Output? –

+0

"% S% S% S% S" Ich hätte meinen Code lesen sollen, bevor ich ihn aus meinem Editor einfügen kann. Dies ist die tatsächliche Ausgabe, wenn Sie diesen Teil löschen. – Nino

Antwort

7

Sie verwenden einen nicht initialisierten Wert in dem Code, den Sie gepostet haben, was erklären würde, warum Sie dieses Problem haben. Der folgende Code führt in dem, was Sie suchen:

#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); 
} 

Dann kompilieren und das Beispiel auszuführen:

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

ETA: Drop the% s, wenn Sie nur die lokale Zeit möchten, ohne UNIX-Zeit danach natürlich.

0

Sie initialisieren nicht struct tm *tmp; mit irgendetwas - bitte könnten Sie ein komplettes Beispiel posten?

+0

Dies war das vollständige Beispiel, ich wusste nicht, wie ich es initialisieren soll. – Nino

3

"% D -% T" sollte Ihnen korrekte Ergebnisse geben, vorausgesetzt, Sie möchten "MM/TT/JJ - HH: MM: SS".

Wenn Ihr Beispiel genau auf Ihre Verwendung abgestimmt ist, sollten Sie in Betracht ziehen, die Funktion in Echtzeit anstelle einer zufälligen Adresse im Speicher anzugeben.

1

% s und% S sind unterschiedliche Formatierungszeichen.

  • % s ist die Anzahl der Sekunden seit der Unix-Epoche.
  • % S ist der aktuelle Zeitsekundenwert (00-60) mit einer führenden 0 für Zahlen < 10.
+0

Hah, wow. Ich muss meine Monospace-Schriftart ändern. Auf einen Blick in meiner aktuellen Schriftart sind untere und obere s kaum zu unterscheiden. Meh. Ich habe nicht daran gedacht, noch einmal nachzusehen, bis du das geschrieben hast. Trotzdem danke. –