Дата сохранения SQLite 31.1269? - PullRequest
0 голосов
/ 06 января 2012

Даты в моем sqlite в андроиде сохраняются 31.1269 вместо фактической даты.У меня есть это в моем адаптере БД:

    + KEY_DATE + " DATETIME DEFAULT CURRENT_TIMESTAMP

В моей деятельности у меня есть

        Date date = new Date(cursor.getLong(cursor.getColumnIndex(mDbHelper.KEY_DATE)));
        mDateFormat = DateFormat.getDateInstance(DateFormat.SHORT);

Когда я делаю Log.d ("Debug", mDateFormat.format (date))выводит 31.1269 что я делаю не так?

Ответы [ 2 ]

2 голосов
/ 06 января 2012

mDateFormat - это просто формат даты - вы не использовали значение date из предыдущей строки. Вы хотите что-то вроде:

Log.d("Debug", mDateFormat.format(date));

Теперь это может дать неправильное значение, но мы можем перейти к этому. Было бы очень полезно, если бы вы показали больше того, что находится в вашем адаптере, чем утверждение частичное , которое вы там получили. У нас недостаточно контекста.

РЕДАКТИРОВАТЬ: Вы звоните getLong, но у вас есть значение по умолчанию CURRENT_TIMESTAMP, которое выглядит как текст :

Если значением по умолчанию для столбца является CURRENT_TIME, CURRENT_DATE или CURRENT_TIMESTAMP, то значение, используемое в новой строке, является текстовым представлением текущей даты и / или времени UTC. Для CURRENT_TIME формат значения - «ЧЧ: ММ: СС». Для CURRENT_DATE: «ГГГГ-ММ-ДД». Формат для CURRENT_TIMESTAMP - "ГГГГ-ММ-ДД ЧЧ: ММ: СС".

Мне неясно, что вы ожидаете, когда вы извлечете это значение как длинное ... в соответствии с документацией, результат зависит от реализации - я подозреваю возвращает 0, давая Вы - дата эпохи Unix, которая будет иметь смысл с вашей выходной, если вы находитесь в часовом поясе к западу от Гринвича.

0 голосов
/ 06 января 2012

Дикая догадка:

  1. Вы находитесь в часовом поясе, который GMT, минус что-то (правка: подтверждено);
  2. длинна, которую вы возвращаете, представляет собой количество секунд, что означает, что вы должны умножить на 1000.

Конструктор Date занимает количество миллисекунд с начала эпохи, а не секунд.

Попробуйте заменить первую строку на:

Date date = new Date(cursor.getLong(cursor.getColumnIndex(mDbHelper.KEY_DATE)) * 1000);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...