我有一个返回的数据列表,我需要计算设备离线的总秒数。 " 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;
请提出解决方案。 还请建议改进代码。 :)
答案 0 :(得分:0)
您的for
循环必须先结束一个元素:
for(int i = 0;i < DeviceReportList.size()-1;i++){
答案 1 :(得分:0)
不要迭代直到最后一个元素:
for(int i = 0;i < DeviceReportList.size() - 1;i++){