2014-12-08 9 views
6

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

6

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:

  1. libC++
  2. libstdC++
  3. 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.

Problemi correlati