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".
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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vermutlich bist du auf eine Plattform, auf der
long
kleiner ist als 64 bit.Nehmen wir an, es sind 32-bits – in diesem Fall der maximale Wert eines
long
ist 2147483648. Allerdings es ist schon ~1312000000000 Millisekunden seit der Epoche, solong
ist eindeutig nicht ausreichend, um halten Sie diesen Wert, und folglich wirst du sehen, überlauf.Ich würde so etwas tun, statt:
Erstellen einer
ptime
aus der angegebenen Anzahl von Millisekunden hat das gleiche problem –ptime
funktioniertlong
und Sie haben einelong long
– so werden Sie im wesentlichen tun müssen, im Gegenteil:long long
ist in der Tat eine positive Zahl, aber wenn ich versuche zu konstruierenptime
durch den Aufruffrom_time_t
auf das Ergebnis bekomme ich ein Falsches Datum wieder: "2012-Okt-02 10:09:36".Deine Frage nur besagt, dass Sie wollen, dass die Anzahl der Millisekunden seit der Epoche -- wo kommt
time_t
kommen? I. e., welchen Datentyp willst du wirklich, schließlich wollen diese?Ich möchte in der Lage sein, zurück zu gehen und her zwischen der Zeit in Millisekunden (
long long
) undptime
. Die Zeit in Millisekunden Versatz von Epoche.Antwort aktualisiert.
wie weiß ich, ob ich baute datetime mit Nanosekunden-Auflösung? Wie ist es gebaut standardmäßig, d.h. ich habe nichts verändert, was die Standard-Auflösung?
InformationsquelleAutor ildjarn
Einer verkürzten Variante ildjarn die große Lösung:
Wäre dies unabhängig davon, ob es gebaut wurde, mit Nanosekunden-Auflösung.
InformationsquelleAutor Therefore
könnten Sie versuchen:
InformationsquelleAutor Arvid