Ошибка Android: DateFormat () иногда показывает 12-часовой формат, когда он должен отображать 24-часовой формат - PullRequest
0 голосов
/ 06 июня 2018

Я использую следующий код:

private long stampAsCal;
private DateFormat formatDateTime, formatDateTimeWSeconds, formatTimeOnly;
formatDateTime = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.SHORT, Locale.getDefault());
formatDateTimeWSeconds = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM, Locale.getDefault());
formatTimeOnly = DateFormat.getTimeInstance(DateFormat.SHORT, Locale.getDefault());

и

    return formatDateTimeWSeconds.format(stampAsCal);

Я обычно получаю строку типа:

05.06.2018 22:00:48

, но в некоторых случаях я получаю

05.06.2018 10:00:48 nachm.

вместо

Что здесь не так?


Телефон Moto Z Play с Android 7.1.1

Мойязыковой настройкой является немецкий (Германия).

Мои настройки даты и времени:

  • Автоматическая дата / время (сеть)
  • Автоматический часовой пояс (сеть)
  • 24-часовой формат активен

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Прежде всего, большое спасибо Joachim Sauer за то, что он идентифицировал проблему и нашел решение.


В случае, если кто-то хотел бы, чтобы это работало также для pre-API18, вот как я решилсправиться с ошибкой Android:

    boolean use24Hour = android.text.format.DateFormat.is24HourFormat(MainActivity.getContext());
    if (use24Hour && formatDateTimeWSeconds instanceof SimpleDateFormat) {
         String pattern = ((SimpleDateFormat) formatDateTimeWSeconds).toPattern();
        if (pattern.contains("h")) {
            pattern = pattern.replace("hh", "HH").replace("h", "HH").replace(" a", "").replace("a", "");
            formatDateTimeWSeconds = new SimpleDateFormat(pattern, Locale.getDefault());
        }
    }
0 голосов
/ 06 июня 2018

К сожалению, в этой области было несколько проблем, большинство из которых описано здесь .Все известные исправлены в более новых выпусках Android, но это не поможет в этом конкретном случае.

Один из возможных способов - проверить is24HourFormat в вашем коде:

boolean use24Hour = android.text.format.DateFormat.is24HourFormat(context); 
final String skeleton = use24Hour ? "Hm" : "hm"; 
final String pattern = android.text.format.DateFormat.getBestDateTimePattern(locale, skeleton);
DateFormat formatter = new SimpleDateFormat(pattern, locale); 

При необходимости измените скелет, чтобы получить нужный формат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...