Ich möchte die aktuelle UTC-Zeit in Millis erhalten. Ich habe bei Google gesucht und einige Antworten erhalten, dass System.currentTimeMillis () die UTC-Zeit zurückgibt. aber das tut es nicht. Wenn ich folgendes mache:
long t1 = System.currentTimeMillis();
long t2 = new Date().getTime();
long t3 = Calendar.getInstance().getTimeInMillis();
Alle drei Zeiten sind fast gleich (Unterschied in Millisekunden aufgrund von Anrufen).
t1 = 1372060916
t2 = 1372060917
t3 = 1372060918
und diese Zeit ist nicht die UTC-Zeit, sondern meine Zeitzonenzeit. Wie kann ich die aktuelle UTC-Zeit in Android erhalten?
Antworten:
Alle drei von Ihnen angezeigten Linien geben die Anzahl der Millisekunden seit der Unix-Epoche an, die ein fester Zeitpunkt ist und nicht von Ihrer lokalen Zeitzone beeinflusst wird.
Sie sagen "diesmal ist nicht die UTC-Zeit" - ich vermute, Sie haben das tatsächlich falsch diagnostiziert. Ich würde vorschlagen, dafür epochconverter.com zu verwenden. Zum Beispiel in Ihrem Beispiel:
Wir wissen nicht, wann Sie diesen Wert generiert haben, aber es sei denn, es war tatsächlich so um 8:01 Uhr UTC, es ist ein Problem mit Ihrer Systemuhr.
Weder
System.currentTimeMillis
noch der Wert innerhalb einesDate
selbst werden von der Zeitzone beeinflusst. Allerdings sollten Sie beachten, dassDate.toString()
sich die lokale Zeitzone verwenden, die verleitet viele Entwickler zu denken , dass ein vonDate
Natur aus mit einer Zeitzone zugeordnet ist - es ist nicht, es ist nur ein Augenblick in der Zeit, ohne eine zugehörige Zeitzone oder sogar Kalendersystem.quelle
Date.getTime()
, um die Millisekunden seit der Unix-Epoche zu ermitteln, durch 1000 zu teilen (da dieser Dateiname seit der Unix-Epoche in Sekunden angegeben ist) und diese Ganzzahl einfach als Zeichenfolge zu formatieren.Ich kann bestätigen , dass alle drei Anrufe können auf der lokalen Zeit abhängen, die Epoche unter Berücksichtigung, nicht die
Date.toString()
oder ein ähnliches Verfahren. Ich habe gesehen, dass sie von der Ortszeit auf bestimmten Geräten mit Android 2.3 abhängen. Ich habe sie nicht mit anderen Geräten und Android-Versionen getestet. In diesem Fall wurde die Ortszeit manuell eingestellt.Der einzige zuverlässige Weg, um eine unabhängige UTC-Zeit zu erhalten, besteht darin, eine Standortaktualisierung mithilfe von anzufordern
GPS_PROVIDER
. DergetTime()
Wert eines Speicherorts, von dem abgerufen wurdeNETWORK_PROVIDER
hängt auch von der Ortszeit ab. Eine andere Option ist das Pingen eines Servers, der beispielsweise einen UTC-Zeitstempel zurückgibt.Also mache ich Folgendes:
quelle