Ich habe ein „Menschen lesbares“ Variablen hours
, minutes
, seconds
, day
, month
, year
, die Werte entsprechend ihren Namen (sie enthält sagen Ich habe SYSTEMTIME
Struktur von <windows.h>
).
Der einzige Weg, ich chrono::time_point
zu schaffen gefunden ist:eleganteste Weg chrono kombinieren :: time_point von Stunden, Minuten, Sekunden usw.
SYSTEMTIME sysTime = ...; // Came from some source (file, network, etc.)
tm t;
t.tm_sec = sysTime.wSecond;
t.tm_min = sysTime.wMinute;
t.tm_hour = sysTime.wHour;
t.tm_mday = sysTime.wDay;
t.tm_mon = sysTime.wMonth - 1;
t.tm_year = sysTime.wYear - 1900;
t.tm_isdst = 0;
std::chrono::system_clock::time_point dateTime =
std::chrono::system_clock::from_time_t(mktime(& t));
Zuerst habe ich eine Millisekunden von SYSTEMTIME
verloren.
Zweitens, (mmm ...) Ich mag diese Art der Konvertierung nicht))
Könnten Sie eine elegantere Möglichkeit geben, dieses Problem zu tun?
Wenn Sie eine ** tatsächliche ** 'SYSTEMTIME' haben, siehe' SystemTimeToFileTime() '. – MSalters
@MSalters 'SystemTimeToFileTime()' gibt mir eine Anzahl von 100-Nanosekunden-Intervallen seit dem 1. Januar 1601, aber ich brauche 'chrono :: time_point' – borisbn
True. Aber das vereinfacht die Mathematik ein wenig. Erhalte FILETIME und 'chrono :: time_point' für 1-1-2000 (um out of range-Probleme zu verhindern - du kannst das einmal tun), subtrahiere diese FILETIME von der aktuellen Zeit, multipliziere mit 10 um Mikrosekunden zu erhalten, und füge diese Mikrosekunden hinzu zum 1-1-2000 time_point – MSalters