¿Cómo puedo comprobar si el sistema es de 12 o 24 horas?

Estoy intentando determinar si la localización actual se fija a 12 o 24 horas, y fija am / pm según corresponda. Esto es lo que tengo ahora mismo, pero muestra am / pm todo el tiempo sin importar si se establece en 24.

if (DateFormat.is24HourFormat(this)) { mHour = mCalendar.get(Calendar.HOUR_OF_DAY); int hourOfDay = mHour; if (hourOfDay>12) views.setTextViewText(R.id.AMPM, "pm"); if (hourOfDay==12) views.setTextViewText(R.id.AMPM, "pm"); if (hourOfDay<12) views.setTextViewText(R.id.AMPM, "am"); } else { views.setTextViewText(R.id.AMPM, ""); } 

¿No debería ser

 if (!DateFormat.is24HourFormat(this)) 

¿Desea asignar am / pm sólo cuando no está configurado en formato de 24 horas, correcto?

Esta es una versión más compacta:

 if (!DateFormat.is24HourFormat(this)) { mHour = mCalendar.get(Calendar.HOUR_OF_DAY); int hourOfDay = mHour; if (hourOfDay >= 12) { views.setTextViewText(R.id.AMPM, "pm"); } else { views.setTextViewText(R.id.AMPM, "am"); } } else { views.setTextViewText(R.id.AMPM, ""); } 

Mejor solución y muestra de código completo:

 Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(System.currentTimeMillis()); // below, the "hour" and "min" are variables,to which you want to set calendar.For example you can take this values from time picker calendar.set(Calendar.HOUR_OF_DAY, hour); calendar.set(Calendar.MINUTE, min); android.text.format.DateFormat dateFormat = new android.text.format.DateFormat(); is24HourFormat= dateFormat.is24HourFormat(this); if (is24HourFormat) { // if system uses 24hourformat dateFormat will format the calender time according to 24hourformat. "HH" means 24hourformat CharSequence setTime = dateFormat.format("HH:mm", calendar); } else { // if system doesnt use 24hourformat dateFormat will format the calender time according to 12hourformat. "hh" means 12hourformat and "a" will show am/pm marker CharSequence setTime = dateFormat.format("hh:mm a", calendar); } 

Para mostrar siempre AM/PM en formato de 12 horas y no algo como vorm/nachm en alemán, utilice Locale.US para el formato de fecha:

 /** * Returns the time in a localized format. The 12-hours format is always displayed with * AM/PM (and not for example vorm/nachm in german). * * @param context the context * @return Localized time (15:24 or 3:24 PM). */ public static String getTime(Context context, long time) { if (android.text.format.DateFormat.is24HourFormat(context)) { return new SimpleDateFormat("HH:mm", Locale.US).format(new Date(time)); } else { return new SimpleDateFormat("hh:mm a", Locale.US).format(new Date(time)); } } 
  • No se puede cargar Android Device Monitor
  • ¿Es posible ver variables en tiempo de ejecución?
  • Android estableció la última hora modificada para el archivo
  • Android: ¿Activar / desactivar un botón en Runtime?
  • Crear un NinePatch / NinePatchDrawable en tiempo de ejecución
  • android: mostrar la notificación en un momento específico?
  • Notificación de Android Push (lento)
  • Hora del reloj Android GMT
  • Android Convertir hora central a hora local
  • Android - los cálculos con el tiempo transcurrido en el cronómetro
  • ¿Hay una manera de cargar arbitrariamente recursos en tiempo de ejecución en Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.