Как проверить, является ли система 12 или 24 часа?
Я пытаюсь определить, установлено ли текущее языковое значение 12 или 24 часа, и установите am/pm соответственно. Это то, что я получил прямо сейчас, но он показывает am/pm все время, независимо от того, установлено ли оно на 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, "");
}
Ответы
Ответ 1
Не должно быть
if (!DateFormat.is24HourFormat(this))
Вы хотите назначить am/pm только тогда, когда он не установлен в 24-часовой формат, правильно?
Вот более компактная версия:
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, "");
}
Ответ 2
Лучшее решение и образец всего кода:
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);
}
Ответ 3
Чтобы всегда отображать AM/PM
в 12-часовом формате, а не что-то вроде vorm/nachm
на немецком языке, используйте Locale.US
для формата даты:
/**
* 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));
}
}