Wie man die Zeit in Millisekunden seit der Epoche der Zeit, die von boost::posix_time::ptime

Ich habe gesehen, einige andere Antworten auf SO , vorschlagen können wir die Zeit von der Epoche in Millisekunden, indem man die Epoche, in der Zeit von der "anderen" Zeit, aber es funktioniert nicht wenn ich versuche es:

ptime epoch = time_from_string("1970-01-01 00:00:00.000");
ptime other = time_from_string("2011-08-09 17:27:00.000");

long diff = (other-epoch).total_milliseconds();

In diesem Stadium diff ist -1349172576 und es sollte eine positive Zahl sein, da die "anderen" Zeit ist 2011. Weiß jemand, was könnte die Ursache sein? Was ist der richtige Weg, um die Millisekunden seit der Epoche?

Darüber hinaus habe ich versucht, zu konstruieren, ein ptime-Objekt von Millisekunden:

ptime result = from_time_t(diff);

Ergebnis wird dann: "1927-Apr-01 13:50:24" und es sollte "2011-Aug-09 17:27:00.000". Was ist der Haken an der Sache?

Update:

OK, also mein Fehler ergibt sich aus der Tatsache, dass ich 2 Programme, eins ist C# (8 byte/64-bit-long) und C++ (4-byte/32-bit-long); in jedem Fall, dass die Interaktion ist nicht hier dargestellt.

Jedoch, wenn ich long long, der Wert ist positiv, aber das resultierende Datum (gebaut from_time_t) ist immer noch falsch: "2012-Okt-02 10:09:36".

Was ist die Größe der long auf Ihrer Plattform?
Wie groß ist schon lange auf Ihrem Rechner? 40 Jahre in Millisekunden um 2^40 Millisekunden. Versuchen Sie googeln log(40+years/1+millisecond)/log(2).
Ah... Windows, long ist 4 bytes, das sollte ich mit lang lang. Mein Programm hat 2 Komponenten: a C# und C++; long in C# ist 8 bytes, aber in C++ ist es nur 4, damit es verwirrt die Dinge ein wenig.
from_time_t dauert time_t, das ist oft ein typedef für long. So sind Sie wieder auf Platz eins. Was für ein Typ bist du eigentlich wollen?
Ich möchte gern ein long long und konvertieren Sie es in ein ptime.

InformationsquelleAutor Kiril | 2011-08-11

Schreibe einen Kommentar