values studio strings resource quantity language change android localization internationalization android-viewbinder

studio - Visualización de fechas en formato localizado en Android



string value android (1)

Si desea omitir el análisis, puede almacenar la fecha como un largo en su lugar. Luego, simplemente puede crear un nuevo objeto Fecha utilizando el análisis largo con cero.

Esto no está directamente relacionado con su pregunta, pero: Una cosa que debería considerar usar es android.text.format.DateFormat para obtener sus formateadores de fecha. De esta manera, formatea sus fechas / horas a la configuración regional del usuario en lugar de sus propios ajustes preestablecidos. También podría simplificar su código, ya que no necesita crear su propio SimpleDateFormat nunca más.

Con estas dos cosas en mente, puede deshacerse de las llamadas a sus propios métodos:

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

Actualmente estoy construyendo mi primera aplicación para Android. Con lo que estoy teniendo problemas es con el almacenamiento y la visualización localizada de las fechas en relación con un SimpleCursorAdapter . Tengo una clase que encapsula el acceso a una base de datos SQLitedatabase con tres tablas. Esta clase se encarga de almacenar todas las fechas en formato ISO ("yyyy-MM-dd"). Cuando los valores de fecha se leen de la base de datos y se muestran en la pantalla, quiero que se formateen en un formato localizado. Aquí está el enfoque que se me ha ocurrido. Utiliza un ViewBinder para hacer el formateo:

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 de 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 hay una mejor manera de hacerlo. Lo que no me gusta es que necesito:

  • dos objetos SimpleDateFormat (uno se usa en parseDatabaseDate() para analizar la cadena de fecha de la base de datos SQLiteDatabase , el otro se usa para formatear el valor)
  • un objeto java.util.Date que se crea y se desecha de inmediato
  • Bastante de (en mi opinión) código repetitivo.

Entonces, es por eso que pregunto: ¿hay una mejor manera de mostrar las fechas en formato localizado?