2010-12-08 16 views
46

Estoy intentando determinar si la configuración regional actual está configurada en 12 o 24 horas, y configurar am/pm en consecuencia. Esto es lo que tengo en este momento, pero muestra am/pm todo el tiempo sin importar si se establece en 24.¿Cómo verifico si el sistema es de 12 o 24 horas?

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, "");   
} 

Respuesta

82

¿No debería ser

if (!DateFormat.is24HourFormat(this)) 

desea asignar am/pm solo cuando no está configurado en formato de 24 horas, ¿verdad?

Aquí 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, ""); 
} 
+1

Excelente. Funciona como un encanto ahora. Acabas de hacer lo que creo que es un error tipográfico. if (hourOfDay => 12) ¿No debería ser sin =? – tristan202

+0

corrigió el error tipográfico. Debe ser "> =". Si es 12 o superior, entonces es "pm", "am" en caso contrario. – Eliseo

+0

Idea muy clara ... Gracias – Noman

7

solución mejor y ejemplo de código entero:

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

is24HourFormat = android.text.format.DateFormat.is24HourFormat(context); 

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); 
} 
2

para mostrar siempre AM/PM en formato de 12 horas y no algo como vorm/nachm en alemán, el uso 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)); 
    } 
} 
Cuestiones relacionadas