2

まず、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 に介入して、日付を好みの形式に変更するにはどうすればよいですか?

NB 情報がアダプターに渡される方法が単純化されるのであれば、喜んで変更します。また、SQLite にフォーマッタが組み込まれている場合は、カーソルの SQLite クエリを変更してもかまいません。

4

3 に答える 3

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)));
于 2010-09-02T01:25:50.270 に答える
1

クエリの方法:

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

SQLite はすべてのフィールドの文字列を返すため、SimpleCursorAdaptor に対して行う必要があるのは、日付を解析してから変換することです。そもそも SQLite で実行する方が簡単でクリーンだと言いたくなる。

于 2010-08-27T21:52:22.883 に答える
0

日付の書式設定は、ViewBinder クラスでも実行できます。良い例はここにあります: http://ambiguiti.es/2009/04/making-custom-rows-in-android-listviews/

于 2011-01-03T05:14:51.300 に答える