Konvertieren timeval zu time_t
Wie kann ich umwandeln timeval zu time_t? Ich bin versucht zu konvertieren:
umtp->ut_tv zu einer time_t-so kann ich mit einem difftime(a,b).
struct {
int32_t tv_sec; /* Seconds */
int32_t tv_usec; /* Microseconds */
} ut_tv; /* Time entry was made */
struct timeval ut_tv; /* Time entry was made */
Sind Sie sicher, dass die Mikrosekunden nicht völlig egal? Wenn Sie es tun, dann Sie müssen schreiben Sie Ihre eigenen
Übrigens, der gezeigte code wird nicht kompiliert; Sie definieren eine variable
Wo hast du diese definition von
das kommt von utmp.h ist Teil von Linux. @Jonathan, du hast Recht über zweimal erklärt, in utmp.h, ich nahm eine else-Anweisung, so ist es wirklich eins oder das andere. Ich war in der Lage, nur die Verwendung von (time_t) utmp->ut_tv.tv.sec
struct timeval difftimeval(const struct timeval *t1, const struct timeval *t2);
Funktion zurückgibt, die t2 - t1
. Oder definieren Sie den return-Typ zu sein double
wenn Sie es vorziehen, so ist es mehr fast-plug-kompatibel mit difftime()
.Übrigens, der gezeigte code wird nicht kompiliert; Sie definieren eine variable
ut_tv
zweimal mit zwei verschiedenen Typen (als anonyme struct und als struct timeval
).Wo hast du diese definition von
timeval
? Die Art der tv_sec
soll time_t
und es wird keine Konvertierung durchgeführt werden, nur abschneiden.das kommt von utmp.h ist Teil von Linux. @Jonathan, du hast Recht über zweimal erklärt, in utmp.h, ich nahm eine else-Anweisung, so ist es wirklich eins oder das andere. Ich war in der Lage, nur die Verwendung von (time_t) utmp->ut_tv.tv.sec
InformationsquelleAutor user994165 | 2012-02-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
time_t
speichert nur Sekunden, soSollte funktionieren, aber da bist du gerade auf der Suche für ein Unterschied, es ist immer die Magie der Subtraktion.
Dadurch können Sie immer alle, die Präzision, die Sie vorher hatte.
Die Subtraktion ist nicht richtig normalisiert; wenn
a.tv_usec = 123456
undb.tv_usec = 654321
, dann sind Sie am Ende mit einem negativen Bruchteil der Zeit, die normalisiert werden sollen, um einen positiven Wert und dietv_sec
Komponente entsprechend angepasst. Natürlich, wenna
kommt vorb
vielleicht beiden Teile sollte das Ergebnis negativ sein? Dies ist die 'segmentierte arithmetische', und es ist in der Regel am einfachsten zu halten, das Zeichen in einem separaten Feld. Wo gibt es nicht ein separates Feld sign hin -, dann werden beide Wert-Segmente sollten über die gleichen Zeichen (oder eine oder der andere kann null sein).Ich würde sagen, alle, aber die meisten signifikanten Bereich sollte immer nicht-negativ.
Der erste gearbeitet für mich.
das funktioniert gut, bis Sie drucken Sie einen negativen Wert ein. Drucken
-1.900000
wenn du meinst-0.100000
ist die Art von Sache, die den Nutzern die heebie-jeebies. Oder, zumindest, auf den Punkt zu drucken, müssen Sie normalisieren die zahlen. Natürlich, Sie haben zu tun, unabhängig, unter anderem, Sie müssen drucken Sie das gebrochene Teil mit%06d
oder%.6d
, und stellen Sie sicher, es ist positiv; wieder, wenn du weglassen, die Breite Spezifikation, können Sie täuschen die Menschen, indem Sie drucken 1 µs als0.1
, was auch nicht gut ist!. Umgang mit unterzeichnet segmentierte zahlen, w/o, die ein Vorzeichen-bit erfordert nicht unerheblichen Aufwand.InformationsquelleAutor Dave
Ohne Verwendung von c-cast, Sie können einfach tun dies :
InformationsquelleAutor BЈовић