1、通过方法计算两个时间段的差值,以Double数据类型返回,因为后续切片循环处理,不满一次的需要按照一次计算
public Double timeMethodOfHous(String beginTime, String endTime) {
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date beginDate;
Date endDate;
long day = 0;
long hour = 0;
long min = 0;
long sec = 0;
try {
beginDate = dateFormat.parse(beginTime);
endDate = dateFormat.parse(endTime);
long beginDateTime = beginDate.getTime();
long endDateTime = endDate.getTime();
long diffrentTime;
if (beginDateTime < endDateTime) {
diffrentTime = endDateTime - beginDateTime;
} else {
diffrentTime = beginDateTime - endDateTime;
}
day = diffrentTime / (24 * 60 * 60 * 1000);
hour = (diffrentTime / (60 * 60 * 1000) - day * 24);
min = ((diffrentTime / (60 * 1000)) - day * 24 * 60 - hour * 60);
sec = (diffrentTime / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - min * 60);
} catch (ParseException e) {
e.printStackTrace();
}
//类型转换
Double distanceDay = Double.parseDouble(String.valueOf(day));
Double distanceHour = Double.parseDouble(String.valueOf(hour));
Double distancemin = Double.parseDouble(String.valueOf(min));
Double distancesec = Double.parseDouble(String.valueOf(sec));
Double distance = (24 * distanceDay) + distanceHour + (distancemin / 60) + (distancesec / 360); //一共多少小时
//按照小时划分(不足一次按一次计算,例如2.4则按3计算)
double ceil = Math.ceil(distance / 72);
return distance;
}
2、根据上面一步的计算结果,将时间端按照一定规则切片分段,这里规定72小时为划分时间段。切片分段后的时间保存至ArraryList()中,便于下一步的循环调用,ArraryList()是有序的
/**
* 按照72小时分段切片
*/
public static List timeMethods(String beginTime, String endTime, Double dataTime) {
Double cycliNum = Math.ceil(dataTime / 72);
Integer cycliRealNum = cycliNum.intValue();
List list = new ArrayList<>();
list.add(beginTime);
try {
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//开始时间
Date beginData = dateFormat.parse(beginTime);
//结束时间
Date endData = dateFormat.parse(endTime);
//开始时间后72小时
Date changeData = null;
for (int i = 0; i < cycliRealNum; i++) {
changeData = new Date(beginData.getTime() + 1000 * 60 * 60 * 72);
String changeDateTime = dateFormat.format(changeData);
//开始时间后72小时与结束时间的前后关系
Boolean result = changeData.before(endData); //开始时间后24在结束时间之前,需要继续分段
if (result) {
list.add(changeDateTime);
beginData = changeData;
} else {
list.add(endTime);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
3、根据上一步的List内容,将时间按段循环调用处理。
注意:1、CarInfos在示例代码中是一个对象,这里使用到的是对象中包含的开始时间(BeginTime)和结束时间(EndTime);2、在for循环外获取了list中的第一个值,是为了时间段分段查询后续赋值正确,注意该位置使用和for循环内的carInfos.setBeginTime(carInfos.getEndTIme());3、for中间的方法是一个根据开始时间和结束时间进行处理的方法,根据个人实际情况书写即可;4、for循环是从1开始的
/**
* 按照切片分段后的时间段,请求某个接口,查询数据
*/
public JSONObject query(CarInfos carInfos, List timeList) {
JSONObject resultParam = null;
carInfos.setBeginTime((String) timeList.get(0));
for (int t = 1; t < timeList.size(); t++) {
carInfos.setEndTime((String) timeList.get(t));
resultParam = this.selectCar(carInfos.getBeginTime(), carInfos.getEndTime());
carInfos.setBeginTime(carInfos.getEndTime());
}
}