2010-08-27 79 views
2

我首先從SQLite數據庫中將信息檢索到光標中。在ListAdapter在ListView中顯示它之前編輯光標數據

光標包含格式的時間戳列: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查詢。

回答

1

查詢方式:

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

因爲SQLite的將返回一個字符串的所有領域,你需要爲你的SimpleCursorAdaptor做的是分析的日期,然後改變它。我很想說,首先讓SQLite完成它更簡單,更清潔。

+0

感謝您的支持。我很樂意解析和轉換,我只想知道如何介入代碼。如果你能告訴我如何做到這一點,或鏈接到某些東西,我會非常感謝:) – HXCaine 2010-08-27 22:37:19

+0

對於Android,我無法說,對不起。 – MPelletier 2010-08-28 03:17:59

+0

它幫助我做我想做的事(儘管我不得不改變DbHelper查詢),所以我會接受答案。再次感謝您的幫助:) – HXCaine 2010-09-01 21:11:34

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))); 
相關問題