do
{
Long time = startTime.getTime()+(((59*60)+59)*1000);
Date endTime = new Date(time);
System.out.println("INFO: Calling startWork("+startTime+","+endTime+")");
startWork(startTime,endTime);
System.out.println("Info ");
startTime = new Date (startTime.getTime()+(60*60*1000));
systemHour = new Date(new Date().getYear(),new Date().getMonth(),new Date().getDate(),new Date().getHours(),0,0);
String stringToUpdateLastProcessedTime = "update meter_thread set last_processed_time='"+sdf.format(startTime)+"' where name='Kochi Occupancy' ";
mysqlStatement.executeUpdate(stringToUpdateLastProcessedTime);
}while(startTime.getTime()!= systemHour.getTime());
上次处理的时间取自数据库表,可能是当前时间之前的任何时间,并在每次数据提取后更新。
上面的代码应该在while循环为真后停止,但它没有。代码中的问题是什么?
答案 0 :(得分:4)
条件非常准确:
startTime.getTime()!= systemHour.getTime()
如果循环错过了结束时间,即使是最小的单位,它也会永远持续下去。
你想要的东西有一个真实的一面(例如一直到-infinity)和一个假的一面(例如一直到正无穷大)所以;
startTime.getTime()<= systemHour.getTime()
或
startTime.getTime()>= systemHour.getTime()
取决于程序的逻辑
我在最后一节中已将这两种情况包括在内,因为逻辑似乎不清楚。我希望看起来像
的情况currentTime.getTime()<=endTime.getTime()
这样它问问题&#34;当前时间是否小于我们结束循环的时间&#34;。在计算endTime的情况下,当循环开始时(例如从现在起1小时),您认为合适