Дата getMonth () в Java от 0-11 портит поиски в базе данных? - PullRequest
0 голосов
/ 11 августа 2011

Второй РЕДАКТИРОВАТЬ:

Похоже, моя проблема может быть в том, где дата установлена ​​в диалоговом окне выбора даты:

// the callback received when the user "sets" the date in the dialog
private DatePickerDialog.OnDateSetListener mDateSetListener =
  new DatePickerDialog.OnDateSetListener() {

    public void onDateSet(DatePicker view, int year, int monthOfYear,
      int dayOfMonth) {
        mYear = year;
        mMonth = monthOfYear + 1;
        mDay = dayOfMonth;
        updateDisplay();    
    }
}

Я +1 к месяцу, но больше никогда не снимаю это, когда сравниваю для базы данных ...

EDIT: Хорошо, я дважды проверил это (наконец-то дошло до этого). Конечно же,

Date test1 = new Date(cobj.getTime().getTime()); //from the Calendar passed in

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

    String val = cobjstrong text.get(Calendar.MONTH) + "/" +
      cobj.get(Calendar.DAY_OF_MONTH) + "/"+ cobj.get(Calendar.YEAR);   

... на самом деле на месяц вперед, когда я смотрю на объект как cobj.getTime (). GetTime (); (длинный для дат, которые я использую). Я пропускаю какой-то другой метод или преобразование?

Не следует ли мне использовать .getTime для объекта Calendar только для того, чтобы получить длинную позицию от этого (с помощью вызова getTime снова для объекта Date?). Иногда мне кажется, что лучше всего сохранять длинные базы данных в миллисекундах в базе данных, а затем просто извлекать их и выполнять там преобразование дат?

РЕДАКТИРОВАТЬ вопрос:

ПОЭТОМУ у меня есть это поле Date в базе данных, где я могу сохранять дату и читать дату, когда я читаю их ... Я должен добавить +1 к .getMonth (), потому что date возвращает это как число 0-11, а не 1-12. После решения этой проблемы и нескольких других (например, .getMinutes, возвращающих int, поэтому, если время 5:00, отображается только 5: 0?), Но я, наконец, получил отображение даты просто великолепно, но я узнал, когда я пытаюсь чтобы запросить базу данных на дату выключены, я думаю, на один месяц. Так что это означает месяц

9/8/2011

Формат

(дд / мм / ГГГГ) не будет запрашиваться правильно при использовании следующего запроса ORMLite: (обратите внимание на .qe, GreaterThanEqual в ormlite).

public void updateDatePickerButtonUI(Calendar cobj, int widget) {
    String val = cobj.get(Calendar.MONTH) + "/"+ cobj.get(Calendar.DAY_OF_MONTH)
        + "/"+ cobj.get(Calendar.YEAR);
    btnChooseDateReview.setText(val);
    //the following just won't query correctly, its a month off
    try {
        //sessionDate
        QueryBuilder<SessionsData, Integer> sb =
            mDB.getSessionsDao().queryBuilder();
        sb.where().ge(SessionsData.SESSIONSDATE_ID_NAME, cobj.getTime());
        List<SessionsData> sessions = mDB.getSessionsDao().query(sb.prepare());
        for (int i = 0; i < sessions.size(); i++) {
            try {
                mDB.getClientsDao().refresh(sessions.get(i).getClient());
                mDB.getPackagesDao().refresh(sessions.get(i).getPackage());
            } catch (SQLException e) {
                ...
            }
        }
        theSessions = new CustomSessionReviewAdapter(mContext, 
            R.layout.session_review_row,  sessions);
        theSessions.notifyDataSetChanged();
        theList.setAdapter(theSessions);
    } catch (SQLException e) {
        ...
    }
}

Так что я, должно быть, неправильно обрабатываю даты, может быть, добавление к месяцу для целей отображения не правильно? или что-то ... может быть, в моем запросе с объектом Calendar я могу сделать этот месяц частью 0-11 или что-то ... не знаю, какой путь выбрать здесь.

1 Ответ

1 голос
/ 11 августа 2011

Я немного запутался @CodeJoy. Я не вижу ссылок на +1 в вашем коде. Я предполагаю, что вы делаете +1, в то время как вы строите val для текста кнопки?

ORMLite сохраняет поле Date в виде строки через драйвер Sqlite (то есть что-то вроде 2011-08-10 18:33:30.316), и мне интересно, генерирует ли преобразование в / из объекта Calendar Date, который не соответствует база данных точно . Может быть, урезаны миллисекунды? Вы создаете Calendar из строки даты кнопки?

Скорее всего, ваша проблема не имеет ничего общего с проблемой +/- 1 в течение месяца. Метод getTime() должен выполнить это преобразование соответствующим образом.

Я бы отладил ваше приложение и посмотрел, что cobj.getTime() возвращает за дату, а затем выполнил mDB.getSessionsDao().queryForAll() и посмотрел, как Date возвращается из драйвера базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...