Подтвердить что ты не робот

Отображение дат в локализованном формате на Android

В настоящее время я создаю свое первое приложение для Android. У меня возникают проблемы с хранением и локализованным отображением дат в связи с SimpleCursorAdapter. У меня есть класс, который инкапсулирует доступ к SQLitedatabase с тремя таблицами. Этот класс заботится о сохранении всех дат в формате ISO ( "yyyy-MM-dd" ). Когда значения даты считываются из базы данных и отображаются на экране, я хочу, чтобы они были отформатированы в локализованном формате. Здесь подход, который я придумал. Он использует ViewBinder для форматирования:

adapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() {
    @Override
    public boolean setViewValue(View view, Cursor cursor,
            int columnIndex) {
        if (view.getId() == R.id.text1) {
            ((TextView) view).setText(getDateFormatView().format(
                parseDatabaseDate(cursor.getString(columnIndex))));
            return true;
        } else if (view.getId() == R.id.text2) {
            ((TextView)view).setText(
                cursor.getString(columnIndex));
          return true;
        } else {
            return false;
        }
    }
});

getDateFormatView() создает объект SimpleDateFormat с шаблоном, который считывается из strings.xml. parseDatabaseDate() выполняется синтаксический анализ даты из базы данных с помощью SimpleDateFormat, который создается с использованием шаблона константы yyyy-MM-dd.

Хотя этот код работает очень хорошо, мне интересно, есть ли лучший способ сделать это. Мне не нравится то, что мне нужно:

  • два объекта SimpleDateFormat (один используется в parseDatabaseDate() для анализа строки даты из SQLitedatabase, другой используется для форматирования значения)
  • a java.util.Date объект, который создается, затем отбрасывается немедленно
  • довольно много (на мой взгляд) шаблонного кода.

Итак, почему я спрашиваю: есть ли лучший способ отображать даты в локализованном формате?

4b9b3361

Ответ 1

Если вы хотите пропустить разбор, вы можете сохранить дату как длинную. Затем вы можете просто создать новый объект Date, используя длинный с нулевым разбором.

Это напрямую не связано с вашим вопросом, но: Одна вещь, которую вы, возможно, захотите рассмотреть, - android.text.format.DateFormat для получения ваших форматов даты. Таким образом, вы отформатируете свои даты/время в настройках локали пользователя вместо собственных пресетов. Это может также сделать ваш код более простым, так как вам больше не нужно создавать свой собственный SimpleDateFormat.

С этими двумя соображениями вы можете избавиться от вызовов к своим собственным методам:

((TextView) view).setText(android.text.format.DateFormat.getDateFormat().format(new Date(cursor.getString(columnIndex))));