Я в настоящее время создаю свое первое приложение для Android. То, из-за чего я испытываю затруднения, является устройством хранения данных и локализованным дисплеем дат в связи с a SimpleCursorAdapter
. У меня есть класс, который инкапсулирует доступ к SQLitedatabase
с тремя таблицами. Этот класс заботится о хранении всех дат в формате ISO ("yyyy-MM-dd"). Когда значения даты считаны из базы данных и отображены на экране, я хочу, чтобы они были отформатированы в локализованном формате. Вот подход, который я придумал. Это использует a 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()
создает a SimpleDateFormat
объект с шаблоном, который читается из strings.xml
. parseDatabaseDate()
делает парсинг даты от базы данных с a SimpleDateFormat
это создается с помощью постоянного шаблона yyyy-MM-dd
.
Хотя этот код работает просто великолепно, я задаюсь вопросом, существует ли лучший способ сделать это. То, что я не люблю, - то, что мне нужно:
SimpleDateFormat
объекты (каждый используется в parseDatabaseDate()
для парсинга строки даты от SQLiteDatabase
, другой используется для форматирования значения),java.util.Date
объект, который создается затем выброшенный сразуТак вот почему я спрашиваю: существует ли лучший способ отобразить даты в локализованном формате?
Вы хотите пропустить расставание, вы можете хранить дату в долгом случае. Тогда вы можете просто создать новый объект даты, используя длинные с нулевым разбором.
Это не связано напрямую с вашим вопросом, но: одна вещь, которую вы можете захотеть рассмотреть возможность использования, - это Android.Text.Format.dateFormat для получения ваших даты форматирования. Таким образом, вы отформатируете свои даты / время в настройки локали пользователя вместо собственных пресетов. Это также может сделать ваш код проще, так как вам больше не нужно создавать свой собственный SimpleDateFormat.
С учетом этих двух вещей вы можете избавиться от вызовов на свои собственные методы:
((TextView) view).setText(android.text.format.DateFormat.getDateFormat().format(new Date(cursor.getString(columnIndex))));