2015-04-22 8 views
23

std::chrono::time_point::time_since_epoch() gibt eine duration zurück, auf einige time_point in der Vergangenheit verwiesen. Wann ist solch ein time_point? Das hängt von der C++ - Implementierung ab oder ist vom C++ - Standard definiert? Oder ist es ein De-facto-Standard, um die Epoche auf den 1. Januar 1970 UTC zu setzen?Wann ist std :: chrono Epoche?

+2

"Epoche" im Allgemeinen den Ausgangspunkt einer Uhr darstellt. Es gibt mehr als eine Uhr in 'C++ 11 chrono'. – bolov

+0

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

+1

Dieser Artikel erklärt das: http://www.informit.com/articles/article.aspx?p=1881386&seqNum=2 – newbie

Antwort

31

Es ist eine Funktion sowohl der spezifischen clock der time_point bezieht sich auf, und die Umsetzung dieser clock. Die Norm legt drei verschiedene Uhren:

  • system_clock
  • steady_clock
  • high_resolution_clock

Und der Norm legt die Epoche nicht für eine dieser Uhren.

Programmierer (Sie) können auch ihre eigenen Uhren erstellen, die eine Epoche angeben können oder nicht.

Es gibt einen de-facto (inoffiziellen) Standard, der std::chrono::system_clock::time_point eine Epoche hat, die mit Unix Time übereinstimmt. Dies ist definiert als die Zeitdauer, die seit 00:00:00 Coordinated Universal Time (UTC), Donnerstag, 1. Januar 1970, verstrichen ist und Schaltsekunden nicht berücksichtigt.

Fwiw, here is a date/time library, die diesen De-facto-Standard nutzt.

Es gibt keinen De-facto-Standard für die anderen beiden Std-spezifizierten Uhren. Zusätzlich kann high_resolution_clock ein Typalias für system_clock oder steady_clock sein.

Unter OS X high_resolution_clock ist eine Art Alias ​​für steady_clock und steady_clock ist eine Anzahl von Nanosekunden, da der Computer (was auch immer zu UTC keine Beziehung) gestartet.

+1

Für die Zukunft Leser: Haben Sie eine Liste mit Links zur offiziellen Dokumentation, in der Sie nachsehen können, ob dies noch zutrifft? – MikeMB

+1

Hier sind alle C++ Papiere: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/ Unter diesen Dokumenten werden Entwürfe des C++ Standards sein, der die offizielle Spezifikation für '' enthält . Die offizielle C++ 14 Spezifikation ist http://www.open-std.org/jtc1/sc22/wg21/prot/14882fdis/n4141.pdf, aber sie ist nicht frei verfügbar. Allerdings ist http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4296.pdf der nächste Entwurf danach und sollte nah genug sein. Der aktuelle Entwurf von C++ 17 ist http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/n4618.pdf –

+0

Vielen Dank, ich hätte präzisieren sollen: Ich gemeint ist, wenn es eine Dokumentation über das De-facto-Verhalten der verschiedenen Standard-Bibliotheksimplementierungen in Bezug auf 'std :: chrono :: system_clock 'gibt. Dies würde die Notwendigkeit vermeiden, plattformspezifische Unittests zu schreiben, um dieses Verhalten zu verifizieren. – MikeMB

Verwandte Themen