代码之家  ›  专栏  ›  技术社区  ›  HXCaine

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

  •  2
  • HXCaine  · 技术社区  · 14 年前

    游标包含以下格式的时间戳列: 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格式显示日期(如果可能的话,也可以是基于区域设置的用户格式)。

    如何使用SimpleCorsorAdapter将日期更改为首选格式?

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

    3 回复  |  直到 14 年前
        1
  •  1
  •   MPelletier    14 年前

    查询方式:

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

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

        2
  •  1
  •   HXCaine    14 年前

    这是我最后的解决办法。

    请注意,这是一个黑客让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)));
    
        3
  •  0
  •   Danny Armstrong    14 年前

    日期的格式化也可以通过ViewBinder类完成。一个很好的例子是: http://ambiguiti.es/2009/04/making-custom-rows-in-android-listviews/