81,094
社区成员
发帖
与我相关
我的任务
分享
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class IntrervalTime {
public static void main(String[] args) {
Date date = null;
List<Date> listDate = new ArrayList<Date>();
Calendar cal = Calendar.getInstance();
//模拟一些数据
cal.set(2013, 7, 8);
cal.set(Calendar.HOUR_OF_DAY, 1);
cal.set(Calendar.MINUTE, 10);
cal.set(Calendar.SECOND, 47);
date = new Date(cal.getTimeInMillis());
listDate.add(date);
//cal.set(Calendar.HOUR_OF_DAY, 1);
cal.set(Calendar.MINUTE, 20);
cal.set(Calendar.SECOND, 43);
date = new Date(cal.getTimeInMillis());
listDate.add(date);
//cal.set(Calendar.HOUR_OF_DAY, 1);
cal.set(Calendar.MINUTE, 30);
cal.set(Calendar.SECOND, 11);
date = new Date(cal.getTimeInMillis());
listDate.add(date);
cal.set(Calendar.HOUR_OF_DAY, 1);
cal.set(Calendar.MINUTE, 40);
cal.set(Calendar.SECOND, 47);
date = new Date(cal.getTimeInMillis());
listDate.add(date);
cal.set(Calendar.HOUR_OF_DAY, 15);
cal.set(Calendar.MINUTE, 30);
cal.set(Calendar.SECOND, 47);
date = new Date(cal.getTimeInMillis());
listDate.add(date);
cal.set(Calendar.HOUR_OF_DAY, 15);
cal.set(Calendar.MINUTE, 40);
cal.set(Calendar.SECOND, 12);
date = new Date(cal.getTimeInMillis());
listDate.add(date);
cal.set(Calendar.HOUR_OF_DAY, 15);
cal.set(Calendar.MINUTE, 50);
cal.set(Calendar.SECOND, 47);
date = new Date(cal.getTimeInMillis());
listDate.add(date);
cal.set(Calendar.HOUR_OF_DAY, 16);
cal.set(Calendar.MINUTE, 00);
cal.set(Calendar.SECOND, 33);
date = new Date(cal.getTimeInMillis());
listDate.add(date);
cal.set(Calendar.HOUR_OF_DAY, 16);
cal.set(Calendar.MINUTE, 10);
cal.set(Calendar.SECOND, 47);
date = new Date(cal.getTimeInMillis());
listDate.add(date);
//查看结果
Map<Integer, Date[]> mapMaxInterval = getMapInterval(listDate);
Set<Integer> set1 = mapMaxInterval.keySet();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
for(Integer i: set1) {
System.out.print("最长的时间段 结果: " + i + " minutes");
System.out.print(" " + sdf.format(mapMaxInterval.get(i)[0]));
System.out.println(" - " + sdf.format(mapMaxInterval.get(i)[1]));
}
}
/**
* 把连续出现的时间段找出,放在一个,MapMap<Integer, Date[]> 容器,Integer 是查找到的顺序,0,1,2 。。。
* Date[] 是一个二维数组,第一个是起始时间, 第二个是结束时间。
* @param listDate
* @return
*/
public static Map<Integer, Date[]> getMapResult(List<Date> listDate) {
//容器定义保存结果
//
Map<Integer, Date[]> mapResult = new HashMap<Integer, Date[]>();
Date[] dateArr = new Date[2];
//初始化起始参数
//
dateArr[0] = listDate.get(0);
long timeMinuteBegin = dateArr[0].getTime();
long timeMinuteEnd = 0;
Integer index = 0;
//连续时间的累加计数
//
int j = 0;
for(int i = 1 ; i < listDate.size(); i++) {
timeMinuteEnd = listDate.get(i).getTime();
long interverl = timeMinuteEnd - timeMinuteBegin - j * 10 * 60 *1000;
if(interverl > 9 * 60 *1000 && interverl < 11 * 60 *1000) {//去除时间的波动。10分钟前后1分钟,算正常。
j++; //如果后续时间正好连续,计数加1。
if(i == listDate.size() -1 ) {//整个序列最后一个时间记录,放到数组里。存入容器。(结束查找了)。
dateArr[1] = listDate.get(i);
mapResult.put(index++ , dateArr);
}
continue;
}
else { //出现非连续时间,上一组保存。 初始化下一组。
//保存
dateArr[1] = listDate.get(i - 1);
mapResult.put(index++ , dateArr);
dateArr = new Date[2];//一定要new 新的数组。
//初始化
dateArr[0] = listDate.get(i);
timeMinuteBegin = dateArr[0].getTime();
j = 0;
}
}
return mapResult;
}
/**
* 找最大间隔的一组,借助于方法getMapResult(List<Date> listDate)。
* 扎到后,存入容器,Map<Integer, Date[]>, 其中integer是时间间隔的分钟数。
* Date数组是保存起始和结束时间。
* @param listDate
* @return
*/
public static Map<Integer, Date[]> getMapInterval(List<Date> listDate) {
Map<Integer, Date[]> mapResult = getMapResult(listDate);
Date[] resultDate = new Date[2];
int intervalMax = 0;
int interval = 0;
Set<Integer> set = mapResult.keySet();
for(Integer i : set) {
interval = (int)(mapResult.get(i)[1].getTime() - mapResult.get(i)[0].getTime())/(60 *1000);
if(interval > intervalMax) {
intervalMax = interval;
resultDate = mapResult.get(i);
}
}
Map<Integer, Date[]> returnMap = new HashMap<Integer, Date[]>();
returnMap.put(intervalMax, resultDate);
return returnMap;
}
}
最长的时间段 结果: 40 minutes 2013-08-08 15:30:47 - 2013-08-08 16:10:47
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class IntrervalTime {
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
//模拟一些数据
List<Date> listDate = new ArrayList<Date>();
Date date = null;
date = new Date(cal.getTimeInMillis());
listDate.add(date);
//System.out.println(listDate.get(0));
cal.add(Calendar.MINUTE, 10);
listDate.add(new Date(cal.getTimeInMillis()));
//System.out.println(listDate.get(1));
cal.add(Calendar.MINUTE, 10);
listDate.add(new Date(cal.getTimeInMillis()));
//System.out.println(listDate.get(2));
cal.add(Calendar.MINUTE, 10);
listDate.add(new Date(cal.getTimeInMillis()));
cal.add(Calendar.MINUTE, 10);
listDate.add(new Date(cal.getTimeInMillis()));
cal.add(Calendar.MINUTE, 20);
listDate.add(new Date(cal.getTimeInMillis()));
cal.add(Calendar.MINUTE, 10);
listDate.add(new Date(cal.getTimeInMillis()));
cal.add(Calendar.MINUTE, 10);
listDate.add(new Date(cal.getTimeInMillis()));
cal.add(Calendar.MINUTE, 30);
listDate.add(new Date(cal.getTimeInMillis()));
cal.add(Calendar.MINUTE, 10);
listDate.add(new Date(cal.getTimeInMillis()));
cal.add(Calendar.MINUTE, 10);
listDate.add(new Date(cal.getTimeInMillis()));
cal.add(Calendar.MINUTE, 10);
listDate.add(new Date(cal.getTimeInMillis()));
cal.add(Calendar.MINUTE, 20);
listDate.add(new Date(cal.getTimeInMillis()));
cal.add(Calendar.MINUTE, 10);
listDate.add(new Date(cal.getTimeInMillis()));
cal.add(Calendar.MINUTE, 10);
listDate.add(new Date(cal.getTimeInMillis()));
cal.add(Calendar.MINUTE, 10);
listDate.add(new Date(cal.getTimeInMillis()));
cal.add(Calendar.MINUTE, 10);
listDate.add(new Date(cal.getTimeInMillis()));
cal.add(Calendar.MINUTE, 10);
listDate.add(new Date(cal.getTimeInMillis()));
cal.add(Calendar.MINUTE, 10);
listDate.add(new Date(cal.getTimeInMillis()));
cal.add(Calendar.MINUTE, 10);
listDate.add(new Date(cal.getTimeInMillis()));
//查看结果
Map<Integer, Date[]> mapMaxInterval = getMapInterval(listDate);
Set<Integer> set1 = mapMaxInterval.keySet();
for(Integer i: set1) {
System.out.println("max interval is : " + i + "minutes");
System.out.println("begin time is : " + mapMaxInterval.get(i)[0]);
System.out.println("end time is : " + mapMaxInterval.get(i)[1]);
}
}
/**
* 把连续出现的时间段找出,放在一个,MapMap<Integer, Date[]> 容器,Integer 是查找到的顺序,0,1,2 。。。
* Date[] 是一个二维数组,第一个是起始时间, 第二个是结束时间。
* @param listDate
* @return
*/
public static Map<Integer, Date[]> getMapResult(List<Date> listDate) {
//容器定义保存结果
//
Map<Integer, Date[]> mapResult = new HashMap<Integer, Date[]>();
Date[] dateArr = new Date[2];
//初始化起始参数
//
dateArr[0] = listDate.get(0);
long timeMinuteBegin = dateArr[0].getTime();
long timeMinuteEnd = 0;
Integer index = 0;
//连续时间的累加计数
//
int j = 0;
for(int i = 1 ; i < listDate.size(); i++) {
timeMinuteEnd = listDate.get(i).getTime();
long interverl = timeMinuteEnd - timeMinuteBegin - j * 10 * 60 *1000;
if(interverl > 9 * 60 *1000 && interverl < 11 * 60 *1000) {//去除时间的波动。10分钟前后1分钟,算正常。
j++; //如果后续时间正好连续,计数加1。
if(i == listDate.size() -1 ) {//整个序列最后一个时间记录,放到数组里。存入容器。(结束查找了)。
dateArr[1] = listDate.get(i);
mapResult.put(index++ , dateArr);
}
continue;
}
else { //出现非连续时间,上一组保存。 初始化下一组。
//保存
dateArr[1] = listDate.get(i - 1);
mapResult.put(index++ , dateArr);
dateArr = new Date[2];//一定要new 新的数组。
//初始化
dateArr[0] = listDate.get(i);
timeMinuteBegin = dateArr[0].getTime();
j = 0;
}
}
return mapResult;
}
/**
* 找最大间隔的一组,借助于方法getMapResult(List<Date> listDate)。
* 扎到后,存入容器,Map<Integer, Date[]>, 其中integer是时间间隔的分钟数。
* Date数组是保存起始和结束时间。
* @param listDate
* @return
*/
public static Map<Integer, Date[]> getMapInterval(List<Date> listDate) {
Map<Integer, Date[]> mapResult = getMapResult(listDate);
Date[] resultDate = new Date[2];
int intervalMax = 0;
int interval = 0;
Set<Integer> set = mapResult.keySet();
for(Integer i : set) {
interval = (int)(mapResult.get(i)[1].getTime() - mapResult.get(i)[0].getTime())/(60 *1000);
if(interval > intervalMax) {
intervalMax = interval;
resultDate = mapResult.get(i);
}
}
Map<Integer, Date[]> returnMap = new HashMap<Integer, Date[]>();
returnMap.put(intervalMax, resultDate);
return returnMap;
}
}