/**
* 当月签到连续天数
* @param signDataList 当月签到日期数据(日期按从前到后排序)
* @return
*/
public static int consecutiveDays(List signDataList){
int cint = 0;
if(null == signDataList || signDataList.size() < 1) {
return 0;
}
// 构建月份天数模型
List<String> monthDays = new ArrayList<String>();
Calendar cale, firstday;
Date baseDate = signDataList.get(0);
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
// 获取前月的第一天
cale = Calendar.getInstance();
cale.setTime(baseDate);
cale.add(Calendar.MONTH, 0);
cale.set(Calendar.DAY_OF_MONTH, 1);
cale.roll(Calendar.DATE, -1);
int maxDate = cale.get(Calendar.DATE);
firstday = Calendar.getInstance();
firstday.setTime(baseDate);
firstday.set(Calendar.DAY_OF_MONTH, firstday.getActualMinimum(Calendar.DAY_OF_MONTH));
Calendar date = Calendar.getInstance();
for(int i = 0; i < maxDate; i++) {
date.setTime(firstday.getTime());
date.add(Calendar.DAY_OF_MONTH,i);
monthDays.add(format.format(date.getTime()));
}
int lq = 0; // 累计
Set<Date> signSet = new HashSet<Date>(); // 排除集合
for(Date sd : signDataList) {
if(!signSet.contains(sd)){
Date dd = sd;
Calendar cal = Calendar.getInstance();
cal.setTime(dd);
int day = cal.get(Calendar.DAY_OF_MONTH);
int j = signDataList.indexOf(sd);
lq = 0;
int size = day + (signDataList.size() - j);
for(int i = day; i < size; i++){
if(format.format(signDataList.get(j)).equals(monthDays.get(i-1))){
lq++;
signSet.add(signDataList.get(j));
if(lq > cint) {
cint = lq;
}
} else {
lq = 0;
break;
}
j++;
}
}
}
return cint;
}
public static void main(String[] args) throws ParseException {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
List<Date> signDataList = new ArrayList<Date>();
signDataList.add(format.parse("2017-07-02"));
signDataList.add(format.parse("2017-07-03"));
signDataList.add(format.parse("2017-07-04"));
signDataList.add(format.parse("2017-07-05"));
signDataList.add(format.parse("2017-07-12"));
signDataList.add(format.parse("2017-07-13"));
signDataList.add(format.parse("2017-07-14"));
signDataList.add(format.parse("2017-07-15"));
signDataList.add(format.parse("2017-07-16"));
signDataList.add(format.parse("2017-07-17"));
signDataList.add(format.parse("2017-07-18"));
signDataList.add(format.parse("2017-07-27"));
System.out.println("连续天数:" + consecutiveDays(signDataList));
}