Holen Sie sich die aktuellen timestamp in Mikrosekunden seit epoch?
Ich habe folgenden code, von dem wir versuchen, den aktuellen timestamp in Mikrosekunden seit epoch Zeit, aber wir sind mit steady_clock
.
inline uint64_t get_timestamp()
{
std::chrono::time_point<std::chrono::steady_clock> ts = std::chrono::steady_clock::now();
return std::chrono::duration_cast<std::chrono::microseconds>(ts.time_since_epoch()).count();
}
Ist das der richtige Weg, das zu tun, da gemäß meinem Verständnis steady_clock
wird verwendet, um zu Messen, den Lauf der Zeit nicht um die aktuelle Zeit des Tages? Oder sollte ich system_clock
für diesen wie unten gezeigt:
inline uint64_t get_timestamp()
{
std::chrono::time_point<std::chrono::system_clock> ts = std::chrono::system_clock::now();
return std::chrono::duration_cast<std::chrono::microseconds>(ts.time_since_epoch()).count();
}
Ich std::chrono
Paket erst seit das ist, was alle unsere code verwendet wird.
std::uint64_t
? Zumindest für ein bisschen mehr, sowieso. Aktuelle Zeit seit Epoche ist 1440440480 Sekunden an die Zeit des Schreibens dieses Artikels, die 0x51dac207a0000 Mikrosekunden.uint64_t
...- Sorry Jungs verwechseln mit Nanosekunden-Präzision für den moment.
InformationsquelleAutor user1950349 | 2015-08-24
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Epochen der chrono Uhren sind nicht spezifiziert. Aber praktisch kann man sich den chrono Uhren diese Weise:
Zeitalter des
steady_clock
ist die Zeit Ihrer Anwendung gestartet, plus eine signierte zufälligen offset. I. e. Sie können nicht abhängig von der Epoche der gleiche über die Anwendung startet. Aber die Epoche wird stabil bleiben, während eine Anwendung ausgeführt wird.Zeitalter des
system_clock
Zeit ist seit Neuen Jahren 1970, zählen nicht Schaltsekunden in die UTC-Zeitzone. Verschiedene Implementierungen implementieren diese mit unterschiedlicher Genauigkeit: libc++ zählt Mikrosekunden, VS zählt 1/10 Mikrosekunden, und der gcc zählt Nanosekunden.high_resolution_clock
ist manchmal eine Art alias fürsteady_clock
und manchmal eine Art alias fürsystem_clock
.Für einen Zeitstempel in Mikrosekunden ich empfehlen, zunächst diese Art alias:
Lagern, statt
uint64_t
. Die Art der Sicherheit dieser Art erspart Ihnen unzählige Laufzeitfehler. Entdecken Sie Ihre Fehler zur compile-Zeit statt.Können Sie die aktuelle
time_stamp
mit:steady_clock
?system_clock
?!system_clock
sorry für die Verwirrung.system_clock
zählt die Unix-Zeit (en.wikipedia.org/wiki/Unix_time) das ist nichts anderes als eine Anzahl von nicht-Schaltsekunden seit 1970 (UTC). Und wie codiert oben, das ist eigentlich eine Anzahl von Mikrosekunden. Es weiß nichts von Tagen, Wochen, Monaten, Jahren oder auch in Schaltjahren. Wenn Sie konvertieren möchten, in den Einheiten, ich empfehle das Datum-Bibliothek: howardhinnant.github.io/date_v2.html (die korrekt behandelt Schaltjahren).Andere Möglichkeit für Menschen, die nicht bekommen konnte anderen Lösungen zu arbeiten: