Wie Lagere ich ein time_t Zeitstempel in eine Datei mit C?
Für eine kleine todo-Programm, das ich Schreibe, ich habe die Zeitstempel, die in dieser form
time_t t = time(NULL);
und gespeichert sind, jedes mal, wenn eine Aufgabe eingetragen ist, zu bezeichnen die Zeit, die eingegeben wurde.
Will ich speichern, um die Aufgaben einer text-Datei, so dass der Zustand kann gespeichert und wiederhergestellt werden. Wie soll ich das speichern des timestamps in die Textdatei und wie Hole ich Sie wieder in meinem Programm nach dem Einlesen der text-Datei?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Konvertieren
time_t
zustruct tm
mitgmtime()
, dann konvertieren Sie diestruct tm
text (vorzugsweise ISO-8601-format) mitstrftime()
. Das Ergebnis wird tragbar sein, Klarschrift und maschinenlesbar.Zurück zu den
time_t
Sie einfach nur analysiert die Zeichenfolge zurück in einestruct tm
und verwendenmktime()
.Referenz:
Code-Beispiel:
strftime()
. Aber ich fandstrptime
schon. Danke!!!Den portable Weg ist, mit der
difftime
Funktion. Berechnen Sie dietime_t
für eine gewählte Epoche mitmktime
, dann verwenden Siedifftime
zum berechnen der Differenz in Sekunden. Um wieder zurück konvertieren, können Sie beginnen mit der Epoche alsstruct tm
und fügen Sie die Anzahl der Sekunden, umtm_sec
sind, dann rufen Siemktime
zu bekommentime_t
.Den sane Weg ist, um davon ausgehen
time_t
wird dargestellt als Sekunden seit der Unix-Epoche (1970-01-01 00:00 GMT) und konvertieren zu einem großen integer-Typ (long long
ist am besten), um es zu drucken. POSIX erforderttime_t
werden Sekunden seit Beginn der Epoche, und auf jedem vernünftigen system wird es werden.Wenn Sie don ' T Geist ein wenig unportabel Annahmen, nur gegossen
time_t
zulong
(long long
wenn Sie einen C99-compiler) schreiben Sie dielong
Wert, Lesen Sie den Wert ab und warf Sie zurück zutime_t
.Der Standard macht keine Garantie, dass ein
time_t
ist auch darstellbar als eine lange: es sagt nurtime_t
ist ein arithmetischer Typ, aber der trick oben funktioniert bei allen sane-Systeme 🙂