Conflito no modo de 12/24 horas
Eu sou um desenvolvedor francês do Android, então, usandoLocale.getDefault()
causa minhaDateFormat
para usar o modo 24 horas. Porém, quando defino manualmente meu dispositivo para o modo de 12 horas por meio do menu de configurações,DateFormat
continua no formato de 24 horas.
Pelo contrário,TimePicker
s são definidos de acordo com minha própria configuração de 12/24 horas.
Existe alguma maneira de fazerDateFormat
s se comportam da mesma maneira queTimePicker
s?
EDITAR:
Aqui está o meuDateFormat
declaração:
timeFormat = DateFormat.getTimeInstance(DateFormat.SHORT, Locale.getDefault());
E aqui é onde eu coloco minhaTimePicker
para o modo de 12 ou 24 horas.
tp.setIs24HourView(android.text.format.DateFormat.is24HourFormat((Context) this));
Minha solução:
De acordo com a resposta de @Meno Hochschild abaixo, aqui está como eu resolvi esse problema complicado:
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());
}
}
Depois disto,timeFormat
formatará corretamente as datas, independentemente de seu dispositivo estar configurado para exibir horários em formato de 24 horas ou em 12 horas. E aTimePicker
também será definido corretamente.