Отображение дат в локализованном формате на Android
В настоящее время я создаю свое первое приложение для Android. У меня проблемы с хранением и локализованным отображением дат в связи с SimpleCursorAdapter
, У меня есть класс, который инкапсулирует доступ к SQLitedatabase
с тремя таблицами. Этот класс заботится о сохранении всех дат в формате ISO ("гггг-мм-дд"). Когда значения даты считываются из базы данных и отображаются на экране, я хочу, чтобы они были отформатированы в локализованном формате. Вот подход, который я придумала. Он использует 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
другой используется для форматирования значения) java.util.Date
объект, который создается, а затем выбрасывается- довольно много (на мой взгляд) шаблонного кода.
Вот почему я спрашиваю: есть ли лучший способ для отображения дат в локализованном формате?
1 ответ
Если вы хотите пропустить синтаксический анализ, вы можете вместо этого сохранить дату как длинную. Тогда вы можете просто создать новый объект Date, используя long с нулевым разбором.
Это не имеет прямого отношения к вашему вопросу, но: одна вещь, которую вы, возможно, захотите рассмотреть, - это android.text.format.DateFormat для получения ваших средств форматирования даты. Таким образом вы форматируете свои даты / время в соответствии с настройками локали пользователя вместо своих собственных предустановок. Это также может упростить ваш код, поскольку вам больше не нужно создавать свой собственный SimpleDateFormat.
Имея в виду эти две вещи, вы можете избавиться от вызовов ваших собственных методов:
((TextView) view).setText(android.text.format.DateFormat.getDateFormat().format(new Date(cursor.getString(columnIndex))));