在业务逻辑里需要查询某个时间段的状态,根据查询起始时间和查询结束时间来查此时间段的记录并返回
后来检查的时候发现如果返回的第一条数据的时间和查询起始时间中间有间隔,那么就会漏掉数据,造成计算的误差
比如从9:00:00查询到10:00:00,结果第一条数据是9:05:00的,那么从9:00:00到9:05:00这段时间的数据其实是有状态的,不能随意丢弃,
所以必须根据第一条数据的时间向上查询一条数据,
然后再将查询起始时间赋值给它,并添加到集合首位,也就是补头数据
后来再检查的时候发现如果查询起始时间刚好就是返回的第一条数据时间,那么还会按照之前的逻辑向前查询一条数据,那么这样就又出现了问题,
刚开始想的是将Date转为String来equals对比查询起始时间和返回第一条数据的时间,但是这样有失准确
后来想到了Date的一个比较方法,就是Date.compareTo(),用来比较两个时间,如果相等返回0,这样就解决了问题,在向上查找一条数据的方法加一个判断
如果compareTo()返回的不是0才会向上查找一条数据,保证了数据的完整和准确.
记录一下
int compare = dataRealTime.get(0).getDataTime().compareTo(startTime); if (0 != compare) { //如果dataRealTime集合至少有一条数据,就查询此数据的前一条数据,赋值为查询起始时间,并添加到集合第一位. addPreviousStatus(dataRealTime, startTime); }