/** * 从最后一次签到时间反推连续签到天数 * * @param list * List<Date> * @param asc * boolean (true:ASC,false:DESC) 对list的描述,是升序还是降序 * @return * * */ public static Map<String, Object> calcuContinue(List<Date> list, boolean asc) { Date end = new Date(); Date start = new Date(); Calendar cBefore = Calendar.getInstance(); Calendar cAfter = Calendar.getInstance(); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); Map<String, Object> result = new HashMap<String, Object>(); List<Date> dateList = new ArrayList<Date>(); if (asc == true) { dateList.addAll(list); } else { for (int i = list.size() - 1; i > -1; i--) dateList.add(list.get(i)); } int size = dateList.size(); if (size > 0) { end = dateList.get(size - 1); } for (int i = size - 1; i > -1; i--) { if (size == 1) { end = start = dateList.get(0); break; } if (i - 1 == -1) { break; } cBefore.setTime(dateList.get(i - 1)); cAfter.setTime(dateList.get(i)); if (daysBetween(cBefore.getTime(), cAfter.getTime()) == 1) { start = cBefore.getTime(); } else { start = cAfter.getTime(); break; } } result.put("start", sdf.format(start)); result.put("end", sdf.format(end)); result.put("continueDays", daysBetween(start, end) + 1); return result; } /** * 计算两个日期之间相差的天数,忽略时分秒 例如:2014年12月31日 与 2015年1月1日 相差1天 * * @param before * @param after * @return 间隔天数 */ private static int daysBetween(Date before, Date after) { SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); try { before = sdf.parse(sdf.format(before)); after = sdf.parse(sdf.format(after)); } catch (ParseException e) { e.printStackTrace(); } long days_long = (after.getTime() - before.getTime()) / (1000 * 60 * 60 * 24); return Integer.parseInt(String.valueOf(days_long)); }
示例:
public static void main(String[] args) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); List<Date> list = new ArrayList<Date>(); list.add(sdf.parse("20141229")); // list.add(sdf.parse("20141230")); list.add(sdf.parse("20141231")); list.add(sdf.parse("20150101")); System.out.println(calcuContinue(list, false)); }
结果:
{start=20141231, continueDays=2, end=20150101}
原文:http://www.cnblogs.com/zno2/p/4718075.html