2010-12-08 65 views
46

J'essaie de déterminer si les paramètres régionaux actuels sont réglés sur 12 ou 24 heures, et régler am/pm en conséquence. Voilà ce que j'ai en ce moment, mais il montre am/pm tout le temps, peu importe si elle est réglée sur 24.Comment vérifier si le système est 12 ou 24 heures?

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

Répondre

82

devrait-il pas être

if (!DateFormat.is24HourFormat(this)) 

Vous souhaitez attribuer am/pm seulement quand il n'est pas réglé au format 24 heures, non?

Voici une version plus compacte:

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

Excellent. ça fonctionne parfaitement maintenant. Vous venez de faire ce que je pense est une faute de frappe. if (hourOfDay => 12) Ne devrait-il pas être =? – tristan202

+0

corrigé la faute de frappe. Cela devrait être "> =". Si c'est 12 ou plus, alors c'est "pm", "am" sinon. – Eliseo

+0

Très bonne idée ... Merci – Noman

7

meilleure solution et échantillon de code:

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

Pour afficher toujours AM/PM au format 12 heures et non quelque chose comme vorm/nachm en allemand, l'utilisation Locale.US pour le format de la date:

/** 
* 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)); 
    } 
}