現在、Android用の最初のアプリを作成しています。私が問題を抱えているのは、SimpleCursorAdapter
に関連する日付の保存とローカライズされた表示です。 SQLitedatabase
へのアクセスを3つのテーブルでカプセル化するクラスがあります。このクラスは、すべての日付をISO形式( "yyyy-MM-dd")で保存します。日付値がデータベースから読み取られて画面に表示されるときに、ローカライズされた形式でフォーマットする必要があります。これが私が思いついたアプローチです。 ViewBinder
を使用してフォーマットを行います。
_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()
は、_strings.xml
_から読み取られるパターンでSimpleDateFormat
オブジェクトを作成します。 parseDatabaseDate()
は、定数パターン_yyyy-MM-dd
_を使用して構築されたSimpleDateFormat
を使用して、データベースからの日付の解析を行います。
このコードは問題なく機能しますが、それを行うためのより良い方法があるかどうか疑問に思っています。私が好きではないのは、私が必要としていることです:
SimpleDateFormat
オブジェクト(1つはSQLiteDatabase
から日付文字列を解析するためにparseDatabaseDate()
で使用され、もう1つは値をフォーマットするために使用されます)Java.util.Date
_オブジェクトだから私は尋ねているのです:ローカライズされた形式で日付を表示するより良い方法はありますか?
解析をスキップしたい場合は、代わりに日付をlongとして保存できます。次に、解析なしのlongを使用して新しいDateオブジェクトを作成できます。
これはあなたの質問に直接関係していませんが、使用を検討したいと思うかもしれないことの1つは、日付フォーマッターを取得するための Android.text.format.DateFormat です。このようにして、独自のプリセットではなく、ユーザーのロケール設定に日付/時刻をフォーマットします。また、独自のSimpleDateFormatを作成する必要がなくなるため、コードが単純になる可能性もあります。
これらの2つのことを念頭に置いて、独自のメソッドへの呼び出しを取り除くことができます。
((TextView) view).setText(Android.text.format.DateFormat.getDateFormat().format(new Date(cursor.getString(columnIndex))));