第二次编辑:
看起来我的问题可能是从日期选择器对话框设置日期的地方:
// 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或者其他什么......不确定在这里采取什么途径。
答案 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()
。