22

現在、Android用の最初のアプリを作成しています。私が問題を抱えているのは、に関連する日付の保存とローカライズされた表示ですSimpleCursorAdapterSQLitedatabase 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()SimpleDateFormatから読み取られるパターンを持つオブジェクトを作成しますstrings.xml。定数パターンを使用して構築さparseDatabaseDate()れたデータベースからの日付の解析を行います。SimpleDateFormatyyyy-MM-dd

このコードは問題なく機能しますが、それを行うためのより良い方法があるかどうか疑問に思っています。私が好きではないのは、私が必要としていることです:

  • 2つのSimpleDateFormatオブジェクト(1つはparseDatabaseDate()からの日付文字列を解析するために使用され、もう1つはSQLiteDatabase値をフォーマットするために使用されます)
  • java.util.Date作成されてすぐに破棄されるオブジェクト
  • (私の意見では)かなり多くの定型コード。

だから私は尋ねています:ローカライズされた形式で日付を表示するより良い方法はありますか?

4

1 に答える 1

43

解析をスキップしたい場合は、代わりに日付をlongとして保存できます。次に、解析がゼロのlongを使用して新しいDateオブジェクトを作成できます。

これはあなたの質問に直接関係していませんが、あなたが使用を検討したいと思うかもしれない1つのことはあなたの日付フォーマッターを取得するためのandroid.text.format.DateFormatです。このようにして、独自のプリセットではなく、ユーザーのロケール設定に合わせて日付/時刻をフォーマットします。また、独自のSimpleDateFormatを作成する必要がなくなるため、コードが単純になる可能性もあります。

これらの2つのことを念頭に置いて、独自のメソッドの呼び出しを取り除くことができます。

((TextView) view).setText(android.text.format.DateFormat.getDateFormat().format(new Date(cursor.getString(columnIndex))));
于 2010-01-22T14:51:57.790 に答える