2012-03-24 2 views
3

Ich benutze System.currentTimeMillis(); um die aktuelle Zeit für mein 'modifiziertes' Datenbankfeld zu erhalten. Ich wandle es in Unix-Epoche um, indem ich es durch 1000 dividiere. Aber selbst wenn das Datum und die Uhrzeit des Telefons/Emulators auf die wahre Zeit eingestellt sind, ist der in der db gespeicherte Wert 2 Stunden früher als die tatsächliche Zeit.Android: Zeit in DB gespeichert ist nicht das gleiche wie am Telefon

Ich bin in GMT + 2, aber ich kann nicht finden, wie dies wirkt.

Nicht System.currentTimeMillis(); die aktuelle Zeit für die aktuellen Zeiteinstellungen abrufen?

Antwort

2

Verwendung Calendar.getInstance() statt, wie dies:

Calendar curTime = Calendar.getInstance(); 

Dieses curTime Objekt wird locale spezifisch.

von der API, in Bezug auf currentTimeMillis()

Diese Methode sollte nicht zur Messung von Timeouts oder andere Messungen verstrichene Zeit verwendet werden, da die Systemzeit zu ändern können die Ergebnisse beeinflussen.

+0

grüßen, @edthethird. – Droritos

0

Von the documentation:

"gibt die Differenz in Millisekunden gemessen wird, zwischen der aktuellen Zeit und Mitternacht, 1. Januar 1970 UTC"

Es Sie die Zeit gibt, unabhängig sein von Ihrer Zeit Zone. Sie sollten also selbst die richtige Zeit berechnen.

2

currentTimeMillis nicht Zeitzone-abhängige Zeitstempel zurück:

die Differenz in Millisekunden gemessen wird, zwischen der aktuellen Zeit und Mitternacht, 1. Januar 1970 UTC.

Allerdings ist es gute Praxis, Zeitstempel in UTC zu speichern und zu nicht umfassen Zeitzone Offsets. Um die "richtige" Zeit anzuzeigen, können Sie eine SimpleDateFormat verwenden:

SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss"); 
// set your Timezone; or use TimeZone.getDefault() for the device timezone 
df.setTimeZone(TimeZone.getTimeZone("Europe/Paris")); 
String time = df.format(new Date(timestamp)); 
Verwandte Themen