Sono consapevole che il valore predefinito di un std::chrono::system_clock::time_point
è l'epoca dell'orologio, ma non riesco a trovare alcun mandato nello standard C++ 11 che l'epoca system_clock
sia la stessa come l'epoca POSIX (1970-01-01T00: 00: 00Z). È sicuro assumere su Linux e Windows che questo è il caso? O sarebbe più intelligente usare std::chrono::system_clock::from_time_t(0)
?Ottieni POSIX epoch come system_clock :: time_point
risposta
Lo standard lascia l'epoca di std::chrono::system_clock::time_point
non specificato.
Ci sono tre implementazioni di std::chrono::system_clock::time_point
Sono consapevole di:
- libC++
- libstdC++
- VS
Tutti e tre di questi sono sottili involucri attorno Unix Time, che conta il numero di di secondi trascorsi dalle 00:00:00 Coordinated Universal Time (UTC), giovedì 1 gennaio 1970, senza contare i secondi bisestili.
Tutti si basano su un tipo integrale a 64 bit con segno. Nessuno di loro è stabile. libC++ ha un periodo di tick di microsecondi. libstdC++ ha un periodo di tick di nanosecondi e VS ha un periodo di tick di 0,1 microsecondi.
Nel caso sia utile, here is a paper che dimostra una certa formula per sfruttare l'epoca non specificata ma comune per convertire avanti e indietro dal calendario civile senza passare per time_t
.
Il vantaggio di utilizzare std::chrono::system_clock::from_time_t
è che è garantito il funzionamento dallo standard. Lo svantaggio è che in pratica ti limiterà alla precisione di un secondo (sebbene quella precisione non sia specificata).
Il vantaggio di assumere l'epoca di std::chrono::system_clock
per essere 1970-01-01, anche se non è specificato, è che si sarà corretti su tutte le implementazioni note e la precisione disponibile per questa alternativa è molto superiore a quella fornita per time_t
.