从0到7的java中的日期getMonth()搞砸了数据库中的搜索?

时间:2011-08-10 20:54:03

标签: android ormlite android-date

第二次编辑:

看起来我的问题可能是从日期选择器对话框设置日期的地方:

// 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(); (我使用的日期很长)。我还缺少其他一些方法或转换吗?

我不应该在Calendar对象上使用.getTime只是为了得到一个长的(在Date对象上再次调用getTime?)。有时在我看来,我最好的选择是以毫秒为单位将数据存储到数据库,然后只检索它们并在那里进行日期转换?

预编辑问题:

所以我在数据库中有这个Date字段,我可以存储日期和读取日期,当我读取它时...我必须在.getMonth()中添加一个+1,因为date返回数字0-11,而不是1-12。在处理了这个问题和其他一些问题之后(比如.getMinutes返回一个int,所以如果时间是5:00只显示5:0?)但是我终于显示了很好的日期,但是当我尝试时我发现了事情发生时查询数据库我想猜一个月。

这意味着一个月

2011/9/8

(dd / mm / YYYY)格式,在使用以下ORMLite查询时不会立即查询:(注意.qe,ormlite中的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或者其他什么......不确定在这里采取什么途径。

1 个答案:

答案 0 :(得分:1)

我有点困惑@CodeJoy。我在代码中没有看到任何对+1的引用。我假设您在为按钮文本构建val时正在执行+1?

ORMLite通过Sqlite驱动程序将Date字段存储为字符串(例如2011-08-10 18:33:30.316之类的字符串),我想知道转换到Calendar对象的转换是否生成{{ 1}}与数据库完全匹配。也许毫秒被截断了?您是否从按钮日期字符串创建Date

很可能你的问题与本月的+/- 1问题无关。 Calendar方法应该适当地进行转换。

我会调试你的应用程序并查看getTime()返回日期的内容,然后执行cobj.getTime()并查看如何从数据库驱动程序返回mDB.getSessionsDao().queryForAll()