2016-03-26 7 views
0

Ich bin neu hier :) Ich entwickle eine kleine App in Android (Java) und ich brauche etwas, um die Sekunden zwischen zwei Ereignissen zu steuern.Zuverlässig "Sekundenzähler" in Java

Das Problem mit System.currentTimeMillis() ist, dass der Benutzer des Geräts sein Systemdatum zum Beispiel nach dem ersten Ereignis ändern kann, und wenn ich also den Wert nehme, der von System.currentTimeMillis() nach dem zweiten Ereignis zurückgegeben wird, und ich mache den Unterschied zwischen den beiden Werten, dieser erhaltene Unterschied ist überhaupt nicht gültig.

Eine andere Option, die ich ausprobiert habe, war System.nanoTime(). Obwohl der Benutzer seine Systemzeit ändert, ist die Sekundenzählung gültig. Aber hier ist das Problem, wenn der Benutzer nach dem ersten Ereignis das Gerät ausschaltet, der von System.nanoTime() nach dem zweiten Ereignis zurückgegebene Wert nicht gültig ist, da beim Neustart des Geräts auch der Zähler von System.nanoTime() startet neu, und daher ist die verstrichene Zeit wieder nicht gültig.

Kennt jemand eine Methode zum Zählen der Sekunden zwischen zwei Ereignissen, unter Berücksichtigung von Datumswechsel und Benutzerneustarts des Geräts?

Vielen Dank im Voraus!

+0

Check out http://stackoverflow.com/questions/4442192/how-to-use-an-internet-time-server-to-get-the-time – elhefe

+0

@Reb Dies wurde schon oft auf Stack angesprochen Überlauf. Bitte suchen Sie gründlich vor dem Posten. –

+0

Auch eine dup von [dies] (http://stackoverflow.com/q/32194245/642706). Und dies [http://stackoverflow.com/q/33449737/642706]. Und dies [http://stackoverflow.com/q/31222397/642706]. –

Antwort

0

Da Sie die Fehler vermeiden möchten, die vom Benutzer mit dem Systemdatum verursacht werden können, können Sie sich nicht auf diese Quelle für Informationen verlassen. Mit dem NTP-Protokoll (Network Time Protocol) kann eine zuverlässige Zeit (und genau, wenn es darauf ankommt) ermittelt werden. Werfen Sie einen Blick auf diese Frage für weitere Details: Java NTP client.

Eine Alternative, die Sie in Betracht ziehen könnten, ist, dass Sie nicht nach einer zuverlässigen Uhr suchen müssen, um die Datums-/Zeitdifferenz zu berechnen, sondern überprüfen können, ob der Benutzer die Systemuhr geändert hat. Ein einfacher Weg wäre, den Zeitstempel zu speichern und periodisch (jede Sekunde) zu überprüfen, ob der neue Zeitstempel, den Sie von der Systemuhr erhalten, kleiner (vor dem vorherigen) ist. Wenn ja, können Sie etwas unternehmen.

Verwandte Themen