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,TimePickers são definidos de acordo com minha própria configuração de 12/24 horas.

Existe alguma maneira de fazerDateFormats se comportam da mesma maneira queTimePickers?

EDITAR:

Aqui está o meuDateFormat declaração:

timeFormat = DateFormat.getTimeInstance(DateFormat.SHORT, Locale.getDefault());

E aqui é onde eu coloco minhaTimePickerpara 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.

questionAnswers(4)

yourAnswerToTheQuestion