So berechnen Sie die Differenz zwischen zwei Java-java.sql.Zeitstempel?
Bitte die nanos, sonst wäre es trivial:
long diff = Math.abs(t1.getTime () - t2.getTime ());
[EDIT] ich möchte das Genaueste Ergebnis, so dass keine Doppelbetten, nur integer/long-Arithmetik. Auch das Ergebnis muss positiv sein. Pseudo-code:
Timestamp result = abs (t1 - t2);
Beispiele:
t1 = (time=1001, nanos=1000000), t2 = (time=999, nanos=999000000)
-> diff = (time=2, nanos=2000000)
Ja, Millisekunden in java.sql.Zeitstempel werden dupliziert, in die Zeit und die nanos par, also 1001 Millisekunden bedeutet 1 Sekunde (1000) und 1 milli, die in der time
Teil und die nanos
Teil, weil 1 Millisekunde = 1000000 Nanosekunden). Dies ist viel mehr hinterhältig als es aussieht.
Schlage ich vor, nicht zu veröffentlichen, eine Antwort, ohne tatsächlich den code testen oder dass ein funktionierendes code-Beispiel bereit 🙂
Also, habt Ihr eine Lösung, dass du gehst zur post, wenn nicht bekommt man es?
Laut den Kommentaren im sourcecode für Zeitstempel, die millis Teil ist eigentlich nicht dupliziert in den nanos. Stattdessen nur bis zu den Sekunden gespeichert sind, in die super-Klasse von java.lang.Datum, und die nanos bietet alle den rest der Zeit.
Ich war an einem arbeitet, aber ich habe gehofft, dass jemand einen funktionierenden Beispiel retten mein Armes Gehirn ... aber ich sollte erraten haben, dass niemand, wenn Google sich nicht alles, aber t1.getTime()-t2.getTime () -
Ja. Das hinterhältige daran ist, dass Sie das richtige tun intern. Wenn Sie rufen Sie die API verwenden, mischen die millis in die beiden Felder; siehe meine unit-tests, wie komisch das aussieht.
Verdammt! dieser Mist hat mich EINE STUNDE! =8*O
Laut den Kommentaren im sourcecode für Zeitstempel, die millis Teil ist eigentlich nicht dupliziert in den nanos. Stattdessen nur bis zu den Sekunden gespeichert sind, in die super-Klasse von java.lang.Datum, und die nanos bietet alle den rest der Zeit.
Ich war an einem arbeitet, aber ich habe gehofft, dass jemand einen funktionierenden Beispiel retten mein Armes Gehirn ... aber ich sollte erraten haben, dass niemand, wenn Google sich nicht alles, aber t1.getTime()-t2.getTime () -
Ja. Das hinterhältige daran ist, dass Sie das richtige tun intern. Wenn Sie rufen Sie die API verwenden, mischen die millis in die beiden Felder; siehe meine unit-tests, wie komisch das aussieht.
Verdammt! dieser Mist hat mich EINE STUNDE! =8*O
InformationsquelleAutor Aaron Digulla | 2009-02-24
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nach einer Stunde und verschiedenen unit-tests, ich kam mit dieser Lösung:
Unit-tests:
Danke 🙂 Der Vorteil der BigInt-code ist, dass es eine einzige Linie (und mehr einfach zu verstehen). Das ist, warum ich gab es ein +1.
InformationsquelleAutor Aaron Digulla
In welchen Einheiten? diff oben geben Millisekunden-Zeitstempel.nanos() gibt einen int in (Millionstel?) von einer Millisekunde.Also meinst du z.B.
oder bin ich etwas fehlt? Eine andere Frage ist, brauchst du diese Genauigkeit? AFAIK die JVM ist nicht garantiert, um genau zu sein auf dieser Ebene, ich glaube nicht, dass es wichtig wäre, es sei denn, Sie sind sicher, dass Ihre Datenquelle ist, dass eine präzise.
Ich würde gerne ein exaktes Ergebnis, bitte.
Danke für die Mühe; ich habe eine exakte Lösung, aber junge, junge, das API ist eine Chaos
Wenn Sie in Millisekunden den Zeitstempel, wird Ihr Ergebnis falsch sein plus 1s == 1,000,000,000 ns (10^9).
InformationsquelleAutor Steve B.
Gebäude auf mmyers code...
Performance-Hinweis: Dieser Vorgang dauert etwa drei mal so lange laufen, wie meine Lösung, aber ungefähr 1/6 der Zeit, um code.
InformationsquelleAutor TofuBeer
Ich benutze diese Methode, um den Unterschied zwischen 2
java.sql.Timestmap
InformationsquelleAutor AechoLiu
(alten code entfernt, um zu verkürzen, die Antwort)
EDIT 2: Neuer code:
Ausgabe:
Edit 3: Wenn Sie es vorziehen, etwas, das gibt einen Timestamp, verwenden Sie diese:
Dieser code übergibt Ihre unit-tests.
Ja und ja, wie es scheint.
Sah nur das Bearbeiten der Frage. Autsch. 😛
Sowas sollte auch einfacher sein ... 😉 Siehe meine Lösung.
dies wird immer besser von minute zu minute 😉
InformationsquelleAutor Michael Myers