12/24-часовой режим конфликта
Я французский разработчик Android, поэтому используюLocale.getDefault()
вызывает мойDateFormat
использовать 24-часовой режим. Но когда я вручную установил свое устройство в 12-часовой режим через меню настроек,DateFormat
продолжает идти в 24-часовом формате.
Напротив,TimePicker
s установлены в соответствии с моими 12/24-часовыми настройками.
Есть ли способ сделатьDateFormat
ведут себя так же, какTimePicker
с?
РЕДАКТИРОВАТЬ:
Вот мойDateFormat
объявление:
timeFormat = DateFormat.getTimeInstance(DateFormat.SHORT, Locale.getDefault());
И вот где я поставилTimePicker
до 12 или 24-часовой режим.
tp.setIs24HourView(android.text.format.DateFormat.is24HourFormat((Context) this));
Мое решение:
Согласно ответу @Meno Hochschild ниже, вот как я решил эту сложную проблему:
boolean is24hour = android.text.format.DateFormat.is24HourFormat((Context) this);
tp.setIs24HourView(is24hour); // tp is the TimePicker
timeFormat = DateFormat.getTimeInstance(DateFormat.SHORT, Locale.getDefault());
if (timeFormat instanceof SimpleDateFormat) {
String pattern = ((SimpleDateFormat) timeFormat).toPattern();
if (is24hour) {
timeFormat = new SimpleDateFormat(pattern.replace("h", "H").replace(" a",""), Locale.getDefault());
}
else {
timeFormat = new SimpleDateFormat(pattern.replace("H", "h"), Locale.getDefault());
}
}
После этого,timeFormat
будет правильно форматировать даты независимо от того, настроено ли ваше устройство для отображения времени в 24-часовом или 12-часовом формате. ИTimePicker
тоже будет правильно настроен.