13

私の Sqlite データベースでは、日付をデータ型 DATE で保存しました。この日付をカーソルから取得するにはどうすればよいですか?

4

3 に答える 3

16

SQLite は、ISO8601 日付/時刻形式を使用して、現在の時刻を UTC (GMT) で表す文字列を格納します。ちなみに、この形式 (YYYY-MM-DD HH:MM:SS) は、日付/時刻の比較に適しています。

以下のコードを使用して日付を取得します。

Cursor row = databaseHelper.query(true, TABLE_NAME, new String[] {
COLUMN_INDEX}, ID_COLUMN_INDEX + "=" + rowId,
null, null, null, null, null);
String dateTime = row.getString(row.getColumnIndexOrThrow(COLUMN_INDEX));

これは、文字列を返し、それを解析し、ローカルの形式とタイム ゾーンに再フォーマットします。

DateFormat iso8601Format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
date = iso8601Format.parse(dateTime);
} catch (ParseException e) {
Log.e(TAG, "Parsing ISO8601 datetime failed", e);
}

long when = date.getTime();
int flags = 0;
flags |= android.text.format.DateUtils.FORMAT_SHOW_TIME;
flags |= android.text.format.DateUtils.FORMAT_SHOW_DATE;
flags |= android.text.format.DateUtils.FORMAT_ABBREV_MONTH;
flags |= android.text.format.DateUtils.FORMAT_SHOW_YEAR;

String finalDateTime = android.text.format.DateUtils.formatDateTime(context,
when + TimeZone.getDefault().getOffset(when), flags);

これがあなたを助けることを願っています。

于 2013-01-10T10:43:58.877 に答える
13

DATESQLite には実際には型がありません (キーワードは、 Datatypes In SQLite Version 3に従ってDATE、列にアフィニティがあることを意味するだけです)、日付を格納する方法の規則を選択するのはあなた次第です。一般的な規則は、(a) ユリウス日付を格納するために実数を使用する、または (b) 整数を使用して Unix エポック (1970 年からの秒数、SQLite の日付と時刻関数が日付と時刻ごとに 'unixepoch' 引数でサポートする) を格納することです。機能)。NUMERIC

.getTime()日付を Unix エポック (オブジェクトを呼び出すとDate1970 年からのミリ秒数が返されるため、Android では便利です) として保存している場合は、SQLiteDATEフィールドを として読み取り、それlongに相当するミリ秒をjava.util.Dateコンストラクターに渡しますDate(long milliseconds)。したがって、次のようになります。

SQLiteManager dbManager = new SQLiteManager(context, DB_NAME, null, VERSION);
SQLiteDatabase db = dbManager.getReadableDatabase();
Cursor cursor = db.query(TABLE_NAME,
    new String[] { COLUMN_NAME_ID, COLUMN_NAME_DATE },
    null, null, // selection, selectionArgs
    null, null, null, null); // groupBy, having, orderBy, limit
try {
    while(cursor.moveNext()) {
        int id = cursor.getInt(0);
        // Read the SQLite DATE as a long and construct a Java Date with it.
        Date date = new Date(cursor.getLong(1)*1000);
        // ...
    }
} finally {
    cursor.close();
    db.close();
}
于 2013-07-28T06:44:37.623 に答える
4

このコードは機能します

String s= cursor.getString(position);
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
    Date d=new Date();
    try {
         d=  dateFormat.parse(s);
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    YourObject.setDate(d);
于 2013-01-10T11:00:34.973 に答える