Problema con Calendar.get (Calendar.HOUR)
Estoy tratando de mostrar en un TextView cuando mi aplicación se actualizó por última vez (por ejemplo, "Última actualización a las 12:13.) Estoy tratando de utilizar una instancia de calendario y pensé que lo entendía correctamente, pero parece que tienen problemas. Para obtener una instancia que utilizo el método Calendar.getInstance () .Entonces para obtener la hora y minuto que estaba usando Calendar.get (Calendar.HOUR) y Calendar.get (Calendar.MINUTE). Mi campo de minutos devuelve correctamente, pero Calendario .HOUR es devolver la hora en un reloj de 24 horas y quiero un reloj de 12 horas.Pensé que HOUR_OF_DAY era el reloj de 24 horas.¿Dónde voy mal?
Aquí está el código que estoy usando:
- Establecer la repetición de la alarma cada día a una hora específica En Android
- La eliminación de eventos del calendario no se ha eliminado
- ¡Ayuda! ¿Cómo puedo crear una aplicación de calendario para Android?
- Android: la eliminación de una ocurrencia de evento elimina todo su ocurrencia
- Inicialice la fecha en android datepicker a una fecha específica, que no es la fecha actual.
Calendar rightNow = Calendar.getInstance(); mTv.setText("Refreshed! Last updated " + rightNow.get(Calendar.HOUR) + ":" + rightNow.get(Calendar.MINUTE) + ".");
MTv es mi TextView que estoy actualizando. Gracias por cualquier ayuda.
Además, sería ideal si pudiera decir "Última actualización hace 5 minutos." En lugar de "Última actualización a las 12:13 pm". Pero no estoy seguro de la mejor manera de tener esta actualización cada minuto sin drenaje de recursos o la batería …?
- Sincronización del proveedor del calendario para Android: columnas SYNC_DATA?
- Eliminar y actualizar el evento de calendario existente
- Vista del Calendario de Android para el selector de fechas
- Inserción de elementos de calendario en Android ICS
- Android- Eliminar Calendarview de DatePickerDialogFragment
- Vista de calendario para Android GingerBread y antes (API <11)
- Cómo crear un receptor para crear un nuevo evento
- ¿Cómo crear un calendario personalizado con la gestión de eventos?
Yo recomendaría usar SimpleDateFormat en combinación con la clase Date para formatear la hora:
Date now = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("K:mm a"); String formattedTime = sdf.format(now);
Breve explicación de cómo funciona: Crea un objeto SimpleDateFormat y pasa una String a su construtor que le dice cómo dar formato a cada objeto de tiempo / fecha que se pasa a la función format () de la misma. Hay un montón de constantes / letras que representan un objeto de tiempo especial (por ejemplo, segundos, un marcador AM / PM, .. ver la documentación de la clase para la lista completa).
"K: mm a" significa un formato "11:42 AM" – uno o dos dígitos para la hora (dependiendo de su valor) en un formato de 12 horas, siempre dos dígitos para los minutos (mm) y AM o PM ), Dependiendo del tiempo.
Después de hacer eso, simplemente pase un objeto Date a la función format () y obtendrá una cadena formateada. Tenga en cuenta que una fecha sólo tiene un único punto en el tiempo, si lo crea desde el constructor sin argumentos ("= new Date ()") utiliza la hora actual. Si necesita otro tiempo, puede pasar un argumento largo con el millis, puede obtener que de Calendar.getTimeInMillis ().
A partir de la implementación de la función "Actualizado XY minutos atrás" – sí tendría que actualizar cada minuto y usted tiene que calcular la diferencia entre la actualización y la hora actual. Yo diría que no vale la pena de una batería y la perspectiva de trabajo adicional. Si su aplicación utiliza ciclos de actualización cortos estándar (por ejemplo, cada hora o algo a lo largo de esas líneas) y no es pantalla completa, el usuario tiene un reloj visible en la parte superior / inferior de su pantalla. Si realmente quiere comprobar cuánto tiempo pasó desde la actualización, puede echar un vistazo corto y comparar (en su mayoría sólo minutos o horas / minutos). Y IMHO thats no inconvinience para un usuario, por lo menos no sería para mí. Me gustaría comparar sin pensar en eso. Pero tienden a matar aplicaciones que pierden mi batería sin razón útil.
También tenga en cuenta que no todo el mundo utiliza un formato de 12 horas. Para obtener un formato de hora localizada dependiendo de la configuración de los usuarios / uso del país DateFormat.getTimeInstance (). Esto devuelve un DateFormat, pero esto funciona como el SimpleDateFormat, simplemente pasar un tiempo para format ().
Utilice Calendar.HOUR_OF_DAY para el reloj de 24 horas
Calendar rightNow = Calendar.getInstance(); mTv.setText("Refreshed! Last updated " + rightNow.get(Calendar.HOUR_OF_DAY) + ":" + rightNow.get(Calendar.MINUTE) + ".");
Puede actualizar editText
en cada minuto usando un hilo como el siguiente
Thread t = new Thread(){ public void run() { Calendar oldTime = Calendar.getInstance(); oldMinute = oldTime .get(Calendar.MINUTE); while(true) { Calendar rightNow= Calendar.getInstance(); newMinute = rightNow.get(Calendar.MINUTE); if(newMinute != oldMinute) { oldMinute = newMinute; mTv.setText("Refreshed! Last updated " + rightNow.get(Calendar.HOUR) + ":" + rightNow.get(Calendar.MINUTE) + "."); } } } t.start();
Bueno, Calendar.get (Calendar.HOUR) debería estar devolviendo 12 horas, pero si desea producir un texto ligeramente mejor, puede utilizar la clase TimeUnit para analizar la simplicidad.
long millis = Calendar.getInstance().getTimeInMillis(); String.format("Last updated %d min, %d sec ago.", TimeUnit.MILLISECONDS.toMinutes(millis), TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)) );
- Almacenamiento de diferentes trazos de densidad en la carpeta
- Android: Cómo obtener la imagen de usuario de facebook mediante access_token