¿Cómo obtener una diferencia de tiempo entre dos fechas en la aplicación para Android?

Estoy tratando de implementar un contador de tiempo (cuenta hasta de 0), que básicamente obtiene la variable de tiempo guardado (startTime, que se creó tan pronto como el usuario pulsó un botón) y resta la hora actual (Calendar.getInstance () tal vez? ) Para que el resultado sea la diferencia (en HH: MM: SS) entre las dos veces. Este método se ejecutará en cada marca de un cronómetro para que la vista de texto se actualizará cada segundo, creando efectivamente mi temporizador.

Ahora, tomo esta ruta de la rotonda porque es la única manera que podría figurar para conservar el tiempo transcurrido incluso si la aplicación se mata. Esto se debe a que la variable startTime se guarda en SharedPreferences tan pronto como se crea, y durante cada Tick, el sistema calcula mi temporizador en el momento de encontrar la diferencia entre startTime y la hora actual.

Ahora, he intentado hacer mi startTime una variable del calendario e inicializado como tal:

Calendar startTime = Calendar.getInstance(); 

y entonces

  elapsedTime = startTime - Calendar.getInstance(); 

Pero evidentemente, esto no funciona.

En un proyecto similar, escrito en C #, pude conseguir que funcionara, aunque utilizando una variable DateTime … ¿Existe alguna manera de hacerlo en Android?

Si esto es demasiado complicado, ¿hay una mejor manera de conservar el progreso de mi cronómetro?

¡Por favor y gracias!

Utilizar SharedPreference para almacenar la hora de inicio es exactamente correcto si tiene una única hora de inicio, aunque probablemente desee almacenar Calendar.getInstance().getTimeInMillis() lugar del objeto en sí. A continuación, puede restaurarlo utilizando

 long startMillis = mSharedPreferences.getLong(START_TIME_KEY, 0L); Calendar startTime = Calendar.getInstance(); startTime.setTimeInMillis(millis); 

Calculando la diferencia es a menudo más fácil en milisegundos:

 long now = System.currentTimeMillis(); long difference = now - startMillis; 

A continuación, puede darle salida usando DateUtils.formatElapsedTime () :

 long differenceInSeconds = difference / DateUtils.SECOND_IN_MILLIS; // formatted will be HH:MM:SS or MM:SS String formatted = DateUtils.formatElapsedTime(differenceInSeconds); 
  • Java.lang.illegalStateException se produce al azar al obtener mediaPlayer.getCurrentPosition
  • OnSensorChanged () no se llama
  • CursorIndexOutOfBoundsException en android
  • Android: Cómo abrir un tipo de archivo desconocido
  • Firmado APK tiene diferentes Key-Hash para Facebook
  • ¿Cuándo sale una aplicación para Android?
  • ¿Qué significa usar un "." Sin un objeto en Android (o java)?
  • Android: error que incluye / reempaque las dependencias que hacen referencia a las clases principales de javax
  • Cómo ampliar Android TableLayout
  • Android getIntent (). GetExtras () devuelve null
  • ¿Es seguro pasar el contexto a varios hilos?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.