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.

 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?

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 ()

  • Apache Commons IO en Android
  • Cambiar la actividad con Swipe
  • Cómo cargar marcadores dinámicamente para la posición actual en google-maps de Android?
  • Apache Commons NET: ¿Debo crear un nuevo objeto FTPClient en cada conexión o reutilizar uno?
  • ¿Hacer una Snackbar sin vista?
  • Java: Subclase AsyncTask
  • Transmitir vídeo en vivo desde la cámara en android
  • Android: "El servidor no pudo procesar tu apk. Intentar de nuevo .. "error al cargar en el mercado
  • No se puede iniciar AVD en el emulador. Estudio androide
  • Autocompletar super rápido usando la búsqueda binaria en el archivo clasificado (300000 líneas)
  • ¿Cómo puedo interceptar un objeto observable y modificarlo en RxJava antes de volver al suscriptor?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.