In Java können wir System.currentTimeMillis()
den aktuellen Zeitstempel in Millisekunden seit der Epochenzeit abrufen.
die Differenz, gemessen in Millisekunden, zwischen der aktuellen Zeit und Mitternacht, dem 1. Januar 1970 UTC.
Wie bekomme ich in C ++ das Gleiche?
Derzeit verwende ich dies, um den aktuellen Zeitstempel abzurufen -
struct timeval tp;
gettimeofday(&tp, NULL);
long int ms = tp.tv_sec * 1000 + tp.tv_usec / 1000; //get current timestamp in milliseconds
cout << ms << endl;
Das sieht richtig aus oder nicht?
steady_clock
wird immer vorwärts gehen, es ist ein wahres Maß für die Zeit seit seiner Epoche, währendsystem_clock
es eine Darstellung der logischen Zeit seit der Epoche sein kann. Mit jeder Schaltsekunde könnten die beiden je nach Implementierung des Systems weiter auseinander wachsen.system_clock
mit der UNIX-Epoche identisch sein, aber die Spezifikation besagt nur, dass es sich um die systemweite Echtzeit-Wanduhr handeln muss. Es ist nicht erforderlich, dass diesteady_clock
Realität übereinstimmt, nur dass sie sich nur vorwärts bewegt.timeval
Strukturen ist ärgerlich).verwenden
<sys/time.h>
verweisen Sie dies .
quelle
Diese Antwort ist ziemlich ähnlich wie Oz. , Mit
<chrono>
für C ++ - ich kann es nicht von Oz greifen hat. obwohl...Ich habe das Original-Snippet unten auf dieser Seite aufgenommen und es leicht modifiziert, um es zu einer vollständigen Konsolen-App zu machen. Ich liebe es, dieses kleine alte Ding zu benutzen. Es ist fantastisch, wenn Sie viel Skripte erstellen und ein zuverlässiges Tool in Windows benötigen, um die Epoche in Millisekunden zu erfassen, ohne auf VB oder weniger modernen, weniger leserfreundlichen Code zurückgreifen zu müssen.
quelle
-560549313
das ist nicht richtig, oder?int
!int nowms = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count();
. Ich habe das umgeschaltetint64_t
und es funktioniert! Vielen Dank, dass Sie um weitere Informationen gebeten haben!unsigned long long
ist portabler und__int64
nur bei MSVC verfügbar.Wenn Sie gettimeofday verwenden, müssen Sie auf long long umwandeln, da sonst Überläufe und damit nicht die tatsächliche Anzahl von Millisekunden seit der Epoche auftreten: long int msint = tp.tv_sec * 1000 + tp.tv_usec / 1000; Ich gebe dir eine Nummer wie 767990892, die 8 Tage nach der Epoche rund ist ;-).
quelle
Seit C ++ 11 können Sie verwenden
std::chrono
:std::chrono::system_clock::now()
.time_since_epoch()
duration_cast<milliseconds>(d)
std::chrono::milliseconds
in Ganzzahl übersetzen (uint64_t
um einen Überlauf zu vermeiden)quelle
Schließen Sie
<ctime>
dietime
Funktion ein und verwenden Sie sie .quelle