Actualmente estoy compilando mi primera aplicación para Android. Lo que estoy teniendo problemas es el almacenamiento y la visualización localizada de fechas en relación con un SimpleCursorAdapter
. Tengo una clase que encapsula el acceso a un SQLitedatabase
con tres tablas. Esta clase se encarga de almacenar todas las fechas en formato ISO ("aaaa-MM-dd"). Cuando los valores de fecha se leen desde la base de datos y se muestran en la pantalla, quiero que se formateen en un formato localizado. Este es el enfoque que se me ocurrió. Se utiliza un ViewBinder
hacer el formato:Mostrando fechas en formato localizado en 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()
crea un objeto SimpleDateFormat
con un patrón que se lee desde strings.xml
. parseDatabaseDate()
realiza el análisis de la fecha desde la base de datos con un SimpleDateFormat
que se construye utilizando un patrón constante yyyy-MM-dd
.
Aunque este código funciona bien, me pregunto si existe una mejor manera de hacerlo. Lo que no me gusta es que necesito:
- dos
SimpleDateFormat
objetos (se emplea enparseDatabaseDate()
con el fin de analizar la cadena de la fecha de laSQLiteDatabase
, el otro se utiliza para dar formato al valor) - una
java.util.Date
objeto que se crea y luego descarta inmediatamente - bastante (en mi opinión) código repetitivo.
Es por eso que estoy preguntando: ¿hay una mejor manera de mostrar las fechas en formato localizado?
Daniel, gracias por eso. Todavía tengo que familiarizarme con las clases de Google que reemplazan las clases Java comunes, como android.text.format.DateFormat. Usar longs para almacenamiento es una buena idea, también. Eso debería funcionar para esta aplicación específica que definitivamente no necesita almacenar fechas anteriores a 1970. –
El código proporcionado por Daniel es teóricamente correcto, pero en su lugar tengo que hacer algunos ajustes para que sea esto: (vista (Vista de texto)) .setText (android.text.format.DateFormat.getDateFormat (Class.this) .format (new Date (cursor.getLong (columnIndex)))); – okysabeni