2015-04-22 14 views
23

std::chrono::time_point::time_since_epoch() restituisce un duration, riferito a qualche time_point in passato. Quando è un tale time_point? Dipende dall'implementazione del C++ o è definita dallo standard C++? O è di fatto uno standard per impostare l'epoca al 1 ° gennaio 1970 UTC?Quando è std :: chrono epoch?

+2

'epoch' in generale rappresenta il punto di partenza di un orologio. C'è più di un orologio in 'C++ 11 chrono'. – bolov

+0

http://en.cppreference.com/w/cpp/chrono/time_point/time_since_epoch – SChepurin

+1

Questo articolo spiega questo: http://www.informit.com/articles/article.aspx?p=1881386&seqNum=2 – newbie

risposta

31

È una funzione sia dello specifico 01 che del time_point fa riferimento, sia dell'implementazione di tale clock. Lo standard specifica tre diversi orologi:

  • system_clock
  • steady_clock
  • high_resolution_clock

e lo standard non specifica l'epoca per uno di questi orologi.

I programmatori (voi) possono anche creare i propri orologi, che possono o non possono specificare un'epoca.

C'è uno standard di fatto (non ufficiale) che std::chrono::system_clock::time_point ha un'epoca coerente con Unix Time. Questa è definita come la durata che è trascorsa dalle 00:00:00 Coordinated Universal Time (UTC), giovedì 1 gennaio 1970, senza contare i secondi bisestili.

Fwiw, here is a date/time library che sfrutta questo standard de facto.

Non esiste uno standard de facto per gli altri due orologi specificati nello standard. Inoltre, high_resolution_clock può essere un alias di tipo per system_clock o steady_clock.

Su OS X, high_resolution_clock è un tipo alias per steady_clock, e steady_clock è un conteggio di nanosecondi dal momento che il computer avviato (nessun rapporto di sorta per UTC).

+1

Per il futuro lettori: hai una lista di link alla documentazione ufficiale dove potresti verificare se questo è ancora vero? – MikeMB

+1

Ecco tutti i documenti del C++: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/ Tra questi documenti ci saranno bozze dello standard C++ che contiene le specifiche ufficiali per '' . La specifica ufficiale di C++ 14 è http://www.open-std.org/jtc1/sc22/wg21/prot/14882fdis/n4141.pdf ma non è disponibile gratuitamente. Tuttavia http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4296.pdf è la prossima bozza successiva e dovrebbe essere abbastanza vicino. L'attuale bozza di C++ 17 è http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/n4618.pdf –

+0

Grazie mille, avrei dovuto essere più preciso: I significava se c'è qualche documentazione sul comportamento de facto delle diverse implementazioni di libreria standard riguardo a 'std :: chrono :: system_clock'. Ciò eviterebbe la necessità di scrivere attivazioni specifiche della piattaforma per verificare tale comportamento. – MikeMB