В настоящее время я создаю свое первое приложение для Android. У меня возникают проблемы с хранением и локализованным отображением дат в связи с SimpleCursorAdapter
. У меня есть класс, который инкапсулирует доступ к SQLitedatabase
с тремя таблицами. Этот класс заботится о сохранении всех дат в формате ISO («yyyy-MM-dd»). Когда значения даты считываются из базы данных и отображаются на экране, я хочу, чтобы они были отформатированы в локализованном формате. Вот такой подход, который я придумал. Он использует ViewBinder
сделать форматирование:Отображение дат в локализованном формате на Android
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
объект, который создается, затем сразу же отбрасывается - довольно много (на мой взгляд) шаблонного кода.
Так вот почему я спрашиваю: есть ли лучший способ отображать даты в локализованном формате?
Даниил, спасибо за это. Мне еще нужно ознакомиться с классами Google, которые заменяют обычные классы Java, такие как android.text.format.DateFormat. Хорошая идея - использование longs для хранения. Это должно работать для этого конкретного приложения, которое, безусловно, не должно хранить даты до 1970 года. –
Код, данный Даниэлем, является теоретически правильным, но я должен внести некоторые корректировки и сделать так: ((TextView) view) .setText (android.text.format.DateFormat.getDateFormat (Class.this) .format (новая дата (cursor.getLong (columnIndex)))); – okysabeni