ho un "leggibile" variabili hours
, minutes
, seconds
, day
, month
, year
che contiene i valori corrispondenti ai loro nomi (diciamo Ho la struttura SYSTEMTIME
da <windows.h>
).
L'unico modo che ho trovato per creare un chrono::time_point
è:modo più elegante per combinare crono :: time_point da ore, minuti, secondi, ecc
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));
In primo luogo, ho perso un millisecondi da SYSTEMTIME
.
Secondo, (mmm ...) Non mi piace questo tipo di conversione))
Potrebbe fornire un modo più elegante per risolvere questo problema?
Se si dispone di un ** effettivo ** 'SYSTEMTIME', consultare' SystemTimeToFileTime() '. – MSalters
@MSalters 'SystemTimeToFileTime()' mi dà un numero di intervalli di 100 nanosecondi dal 1 gennaio 1601, ma ho bisogno di 'chrono :: time_point' – borisbn
True. Ma questo semplifica un po 'la matematica. Ottieni FILETIME e 'chrono :: time_point' per 1-1-2000 (per evitare problemi fuori intervallo - puoi farlo una volta), sottrai quel FILETIME dall'ora corrente, moltiplica per 10 per ottenere microsecondi e aggiungi quei microsecondi all'1-2-2000 time_point – MSalters