在ListAdapter在ListView中显示光标数据之前编辑光标数据

时间:2010-08-27 20:36:49

标签: android datetime sqlite android-listview

我首先将SQLite数据库中的信息检索到游标中。

游标包含格式为yyyy-MM-dd HH:mm:ss.SSS的时间戳列,例如2010-08-27 21:25:30.575

检索完毕后,我设置SimpleCursorAdapter就像这样(代码简化):

SimpleCursorAdapter adapter = 
            new SimpleCursorAdapter(this, R.layout.row_layout, cursor, new String{KEY_TITLE, KEY_TIMESTAMP}, new int[]{ R.id.title, R.id.timestamp } );
    setListAdapter(adapter);

代码以上述格式成功显示时间和日期,但我想只显示DD / MM / YYYY格式的日期(如果可能,也可以显示基于区域设置的用户格式)。

如何干预SimpleCursorAdapter以将日期更改为我的首选格式?

N.B。如果它简化了问题,我愿意改变信息传递给适配器的方式。如果SQLite有内置的格式化程序,我也不介意更改游标的SQLite查询。

3 个答案:

答案 0 :(得分:1)

查询方式:

SELECT strftime('%d/%m/%Y',TimeStampField) FROM MyTable...

因为SQLite将返回所有字段的字符串,所以您需要为SimpleCursorAdaptor执行的操作是解析日期然后对其进行转换。我很想说首先由SQLite完成它更简单,更清洁。

答案 1 :(得分:1)

这是我的最终解决方案。

请注意,这是一个让SQLite重新格式化检索日期的黑客攻击。更好的解决方案是存储日期并自行检索。

拥有检索键的字段:

public static final String KEY_TIMESTAMP = "timestamp";
public static final String KEY_DATESTAMP = 
              "strftime('%d/%m/%Y'," + KEY_TIMESTAMP +")";

将正常时间戳存储在数据库条目中:

String timeStamp = new Timestamp( 
                Calendar.getInstance().getTimeInMillis() ).toString();

ContentValues initialValues = new ContentValues();
...
initialValues.put(KEY_TIMESTAMP, timeStamp);

return mDb.insert(DATABASE_TABLE, null, initialValues);

其中mDb是SQLiteDatabase对象。

yyyy-MM-dd HH:mm:ss.SSS格式检索时间戳时,请使用常规KEY_TIMESTAMP

以下方法检索包含两个项目的行。使用适当的密钥进行检索。

public Cursor fetchItem(long rowId) throws SQLException {
        Cursor cursor =
                mDb.query(true, DATABASE_TABLE, 
                        new String[] {KEY_ITEMID,KEY_TIMESTAMP,KEY_DATESTAMP},
                        KEY_ITEMID + "=" + rowId, 
                        null, null, null, null, null
                );
        return cursor;
}

使用适当的密钥进行检索

mTimestamp = quote.getString(
                quote.getColumnIndex(QuotesDbAdapter.KEY_TIMESTAMP)));
mDatestamp = quote.getString(
                    quote.getColumnIndex(QuotesDbAdapter.KEY_DATESTAMP)));

答案 2 :(得分:0)

也可以使用ViewBinder类格式化日期。这里有一个很好的例子:http://ambiguiti.es/2009/04/making-custom-rows-in-android-listviews/