Android – System.currentTimeMillis () no funciona como se esperaba
Utilizo System.currentTimeMillis () para ahorrar la hora que un usuario comienza una actividad.
public class TimeStamp { protected long _startTimeMillis = System.currentTimeMillis(); public String getStartTime() { return new Time(_startTimeMillis).toString(); }
La clase se instancia cuando se inicia la actividad y getStartTime () devuelve la hora correcta. También trato de obtener el tiempo que ha pasado después de que la actividad se ha iniciado.
- La aplicación de Android se bloquea después de integrar React Native con NoClassDefFoundError: com.facebook.react.bridge.JSPackagerWebSocketClient
- ¿Por qué File.listFiles devuelve null cuando se llama a un directorio?
- ¿Cómo hacer lo contrario de atributo de preferencia android: dependencia?
- ANDROID: cliente de correo electrónico receptor e-mail id vacío en android-parse
- SSLHandshakeException Ancla de confianza para ruta de certificación no encontrada Android HTTPS
public String getElapsedTime() { return new Time(System.currentTimeMillis() - _startTimeMillis).toString(); }
Esto funciona perfectamente bien con un dispositivo Android emulado (android 4.0.3). Pero cuando implemento la aplicación en mi dispositivo Android real (android 4.0.3) getElapsedTime () comienza con una hora adicional y luego cuenta normalmente. Así que en mi dispositivo real getElapsedTime () devolverá "01:00:01" después de que se inició la actividad, pero debería devolver "00:00:01".
¿Tiene alguna idea de por qué sucede esto?
- ¿Cómo puedo enviar los encabezados de autenticación básica HTTP en Android?
- Cómo analizar JSON Array (Not Json Object) en Android
- Aplicación NDK Firma de cheque
- NestedScrollView no juega con Recyclerview dentro
- ¿Cómo implementar un simple método de resaltado de sintaxis para edittext?
- Cómo utilizar recursos enteros dentro de recursos de cadena en android
- Android ¿qué está mal con openFileOutput?
- La notificación de Android vuelve a la actividad incorrecta
Debe utilizar SystemClock.uptimeMillis()
.
UptimeMillis () se cuenta en milisegundos desde que se inició el sistema y se garantiza que es monótono, mientras que System.currentTimeMillis () no es porque el usuario o una aplicación puede cambiarlo en cualquier momento. Además, normalmente se habilita la sincronización automática de hora, que puede cambiar la hora en cualquier momento.
No puede utilizar el tiempo para representar una diferencia entre 2 instantes. En su código, getElapsedTime () devuelve un tiempo cercano a 0, que se interpreta como 1970, 1 de enero. Pienso que la razón por la que usted tiene un problema es porque usted no tiene la misma zona horaria en su dispositivo, por lo tanto el origen del tiempo no es medianoche.
System.currentTimeMillis () devuelve milisegundos pasados entre la hora del dispositivo y la fecha de la época. Es por eso que puede variar de un dispositivo a otro.
http://developer.android.com/reference/java/lang/System.html#currentTimeMillis ()