Подтвердить что ты не робот

Получение даты из базы данных Sqlite в android

В моей базе данных Sqlite я сохранил дату в DATE типа данных. Как я могу получить эту дату из курсора?

4b9b3361

Ответ 1

SQLite хранит строку, представляющую текущее время в формате UTC (GMT), используя формат даты и времени ISO8601. Этот формат (ГГГГ-ММ-ДД ЧЧ: ММ: СС), кстати, подходит для сопоставлений даты и времени.

Используйте приведенный ниже код для получения даты.

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);

Надеюсь, это поможет вам.

Ответ 2

SQLite не имеет типа DATE (ключевое слово DATE означает, что столбец имеет аффинность NUMERIC, за Типы данных в SQLite версии 3), поэтому вам нужно выбрать соглашение о том, как вы будете хранить даты. Общие соглашения: (a) использовать реальные цифры для хранения юлианских дат или (б) использовать целые числа для хранения эпохи Unix (секунды с 1970 года, которые поддерживают функцию даты и времени SQLite с аргументом "unixepoch" за Функции даты и времени).

Если вы делаете сохранение дат как эпоху Unix (удобно для Android, так как вызов .getTime() в объекте DATE возвращает число миллисекунд с 1970 года), тогда прочитайте поле SQLite DATE как 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();
}

Ответ 3

этот код работает

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);