0

2番目の編集:

私の問題は、日付ピッカーダイアログから日付が設定されている場所にある可能性があります。

// 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ですが、データベースを比較するときに、それを二度と外すことはありません...

編集:さて、私はこれをダブルチェックしました(最終的にそれに到達しました)。案の定、

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();として見ると、実際には1か月先です。(私が使用する日付は長いです)。私が見逃している他の方法や変換はありますか?

カレンダーオブジェクトで.getTimeを使用して、それから長さを取得するべきではありません(DateオブジェクトでgetTimeを再度呼び出す場合)。時々、私の最善の策は、ロングをミリ秒単位でデータベースに保存し、それを取得して、そこで日付変換を行うことだと思われることがありますか?

事前編集の質問:

したがって、データベースにこのDateフィールドがあり、emを読み取るときに、日付を格納してから日付を読み取ることができます... dateはそれを数値として返すため、.getMonth()に+1を追加する必要があります。 1〜12ではなく0〜11。この問題と他のいくつかの問題(.getMinutesがintを返すなど、時刻が5:00の場合は5:0のみが表示されますか?)に対処した後、最終的に日付が表示されましたが、試してみるとわかりました物事がずれている日にデータベースにクエリを実行するには、1か月で推測します。つまり、1か月の

2011年9月8日

(dd / mm / YYYY)形式で、次のORMLiteクエリを使用すると正しくクエリされません:( ormliteの.qe、GreaterThanEqualに注意してください)。

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にすることができます...ここでどのような方法を取るべきかわかりません。

4

1 に答える 1

1

@CodeJoyは少し混乱しています。コードに+1への参照がありません。ボタンテキストの値を作成しているときに+1を実行していると思いますか?

ORMLiteはDate、Sqliteドライバー(つまり、のようなもの)を介してフィールドを文字列として格納します。オブジェクトとの間の変換により、データベースと完全に一致しないが生成される2011-08-10 18:33:30.316かどうか疑問に思います。多分ミリ秒は切り捨てられましたか?ボタンの日付文字列からを作成していますか?CalendarDateCalendar

ほとんどの場合、あなたの問題はその月の+/-1の問題とは何の関係もありません。getTime()メソッドは、その変換を適切に行う必要があります。

私はあなたのアプリをデバッグcobj.getTime()し、日付に対して何が返されるかを確認してから、を実行して、データベースドライバーからmDB.getSessionsDao().queryForAll()どのように返されるかを確認します。Date

于 2011-08-10T22:37:51.790 に答える