需求
数据库中存储了一些记录,带时间戳的。需要我读取当天的数据(根据Android平板的时间进行读取)
所以就有了如下的代码:
Calendar instance = Calendar.getInstance();
instance.set(Calendar.SECOND, 0);
instance.set(Calendar.HOUR, 0);
instance.set(Calendar.MINUTE, 0);
instance.set(Calendar.MILLISECOND, 0);
long startTime = instance.getTimeInMillis();
instance.set(Calendar.SECOND, 59);
instance.set(Calendar.HOUR, 23);
instance.set(Calendar.MINUTE, 59);
long endTime = instance.getTimeInMillis();
session.queryBuilder(XXX.class)
.// 此处有N多其他的条件
.where(XXXDao.Properties.Time.between(startTime, endTime))
.list();
结果:
在我的平板上运行没问题,在大多数平板上运行也没问题。
问题发现
在测试的手中有一个平板,发现一个问题就是,记录中明明有当天的数据,但是就是搜索不出来。
问题解决过程
首先我怀疑是数据库未检索出来数据,所以去掉其他的条件,开始查数据库,结果发现了数据。
所以开始判定是我的开始时间和结束时间出现了问题。
所以断点了一下,看一下数据库里的数据,和我的开始时间和结束时间有什么区别。
结果发现,开始时间大于所有数据的时间戳。
所以,我推测是上边的时间计算出现了错误,检查时间设置的代码,发现了
instance.set(Calendar.HOUR, 0);
这里用的是Calendar.HOUR
,轰然想起,好像还有另外一个Calendar.HOUR_OF_DAY
。
于是改为Calendar.HOUR_OF_DAY
。
再次测试,并计算时间戳,发现正确了,记录也读取出来了~~