2 Stimmen

C++ 64bit Zeitstempel zu 32bit time_t

Ich möchte einen 64bit-Zeitstempel (in us) in einen Datumsstring umwandeln, um das Systemdatum über den Systembefehl "date" zu setzen. Ich habe diese Lösung gefunden/implementiert:

char loc_ach_buf[25];
uint64_t loc_ui64_TimeStamp_us;
time_t loc_t_TimeStamp_s;
...         
loc_t_TimeStamp_s = loc_ui64_TimeStamp_us / 1000000;
strftime(loc_ach_buf, sizeof(loc_ach_buf), "date %Y%m%d%H%M.%S", gmtime(&loc_t_TimeStamp_s));
system(loc_ach_buf);

Dies funktioniert gut, aber mein Problem ist, dass time_t ist ein 32bit Wert auf meinem System und so wird es Probleme geben Jahr 2038 Problem . Hat jemand eine Idee, wie man das Problem lösen kann? Oder gibt es Alternativen zu strftime.

0voto

zmbq Punkte 36669

Warum wird der Systembefehl 'date' verwendet? Verwenden Sie den SetSystemTime API-Aufruf.

0voto

snowdude Punkte 3784

Ich bin nicht sicher, mit welchem Toolset Sie arbeiten, aber der Microsoft-Compiler unterstützt eine Funktion _localtime64_s die einen 64-Bit-Zeitwert in die tm-Struktur konvertiert, die Sie dann mit strftime .

Wenn Ihr CRT keine 64-Bit-Zeitfunktionen unterstützt, sehen Sie sich dies an: Eine Version von gmtime(), die den 2038-Fehler umgeht

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X