在休眠中迭代返回的列表并在几秒钟内获得时间

时间:2015-02-23 07:36:12

标签: java hibernate

我有一个返回的数据列表,我需要计算设备离线的总秒数。 " 0"当设备关闭时," 1"当它打开时,它会在行中返回" ConnectedStatus"。有一个"更新时间"行也返回。我必须计算每个0到下一个1之间的时间差,然后将它们相加以找到总的dissconn时间。返回列表将启动连接值作为1,并且结束连接值可以是1或0,因为记录介于时间范围之间。 ConnectedStatus列值将始终为1,0,1,0,1 ....

我在下面做过;

SimpleDateFormat format = new SimpleDateFormat("yy/MM/dd HH:mm:ss");
long totalDissConnTime = 0;
for(int i = 0;i < DeviceReportList.size();i++){
    DeviceReportList reportRow = DeviceReportList.get(i);
    if(reportRow .getConnectedStatus() == 0 ){
      Date d2 = format.parse(DeviceReportList.get(i+1).getUpdatedTime());
      Date d1 = format.parse(reportRow.getUpdatedTime());
      long diff = d2.getTime() - d1.getTime();
      long diffSeconds = diff / 1000 % 60;
      totalDissConnTime = totalDissConnTime + diffSeconds;
      System.out.println("Loop " + (i+1) +": Device offline for "+ totalDissConnTime + " seconds.");
    }

我想就行了

Date d2 = format.parse(DeviceReportList.get(i+1).getUpdatedTime());

我可以得到IndexOutOfBoundsException,因为我正在做(i + 1),如果最后一条记录的ConnectedStatus值为&#34; 0&#34;,它将不会得到&#34;(i + 1)&#34;

请提出解决方案。 还请建议改进​​代码。 :)

2 个答案:

答案 0 :(得分:0)

您的for循环必须先结束一个元素:

for(int i = 0;i < DeviceReportList.size()-1;i++){

答案 1 :(得分:0)

不要迭代直到最后一个元素:

for(int i = 0;i < DeviceReportList.size() - 1;i++){