Wie konvertiert man einen epochalen Zeitstempel (double) in einen std :: chrono :: time_point?

8

Ich habe einen epochalen Epochen-Zeitstempel, dargestellt als double , den ich in ein entsprechendes std::chrono::time_point konvertieren möchte. Die Epoche ist die übliche UNIX-Epoche seit dem 1.1.1970. Ich weiß, dass std::chrono::system_clock::from_time_t existiert, aber ein time_t hat keinen Bruchteil. Was wäre der beste Weg, dies mit C ++ 11 zu tun?

Diese Frage bezieht sich auf Unix-Timestamp auf boost :: posix_time :: ptime , außer dass es nach der C ++ 11- statt nach der Boost-Version fragt.

    
mavam 10.02.2012, 00:01
quelle

1 Antwort

12

Unter der Annahme, dass die Epoche mit einem bekannten clock -Typ identisch ist, können Sie eine Dauer mit einer double -Darstellung verwenden und in die von dieser Uhr verwendete Dauer konvertieren.

%Vor%

Dies sollte für jede Berechnung, die diese Uhr betrifft, in Ordnung sein, da Sie die gleiche Genauigkeit wie die Uhr verwenden, aber die Genauigkeit bei der Konvertierung möglicherweise etwas verliert. Wenn Sie das nicht verlieren wollen, müssen Sie eine time_point Spezialisierung verwenden, die diesen double -basierten Durationstyp verwendet. Und dann verwenden Sie das in Ihren Berechnungen (natürlich mit allen Vorbehalten der Fließkomma-Mathematik).

%Vor%

Dies erschwert jedoch Berechnungen mit derselben Uhr, da Konvertierungen erforderlich sind. Um dies zu vereinfachen, können Sie einen eigenen Clock-Wrapper erstellen, der die Konvertierungen durchführt und Folgendes verwendet:

%Vor%     
R. Martinho Fernandes 10.02.2012, 00:31
quelle