/** * 获取某段时间之间的月份 * @param minDate * @param maxDate * @return * @throws ParseException */ public static List<String> getMonthBetween(String minDate, String maxDate) throws ParseException { List<String> result = new ArrayList<String>(); Date d1 = new SimpleDateFormat("yyyy-MM-dd").parse(minDate);//定义起始日期 Date d2 = new SimpleDateFormat("yyyy-MM-dd").parse(maxDate);//定义结束日期 Calendar dd = Calendar.getInstance();//定义日期实例 dd.setTime(d1);//设置日期起始时间 while(dd.getTime().before(d2)){//判断是否到结束日期 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM"); String str = sdf.format(dd.getTime()); result.add(str); dd.add(Calendar.MONTH, 1); } return result; } |
/** * 计算两个日期间的月数 * @param minDate * @param maxDate * @return * @throws ParseException */ public static int getMonthDiff(String minDate, String maxDate) throws ParseException { Date d1 = new SimpleDateFormat("yyyy-MM-dd").parse(minDate);//定义起始日期 Date d2 = new SimpleDateFormat("yyyy-MM-dd").parse(maxDate);//定义结束日期 Calendar c1 = Calendar.getInstance(); Calendar c2 = Calendar.getInstance(); c1.setTime(d1); c2.setTime(d2); if(c1.getTimeInMillis() < c2.getTimeInMillis()) return 0; int year1 = c1.get(Calendar.YEAR); int year2 = c2.get(Calendar.YEAR); int month1 = c1.get(Calendar.MONTH); int month2 = c2.get(Calendar.MONTH); int day1 = c1.get(Calendar.DAY_OF_MONTH); int day2 = c2.get(Calendar.DAY_OF_MONTH); // 获取年的差值 假设 d1 = 2015-8-16 d2 = 2011-9-30 int yearInterval = year1 - year2; // 如果 d1的 月-日 小于 d2的 月-日 那么 yearInterval-- 这样就得到了相差的年数 if(month1 < month2 || month1 == month2 && day1 < day2) yearInterval --; // 获取月数差值 int monthInterval = (month1 + 12) - month2 ; if(day1 < day2) monthInterval --; monthInterval %= 12; return yearInterval * 12 + monthInterval; } |
/** * 获取两个日期之间的所有日期 * @param startDate * @param endDate * @return * @throws ParseException */ public static List<String> getBetweenDates(String startDate, String endDate) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date start = new SimpleDateFormat("yyyy-MM-dd").parse(startDate);//定义起始日期 Date end = new SimpleDateFormat("yyyy-MM-dd").parse(endDate);//定义结束日期 List<String> result = new ArrayList<String>(); Calendar tempStart = Calendar.getInstance(); tempStart.setTime(start); Calendar tempEnd = Calendar.getInstance(); tempEnd.setTime(end); while (tempStart.before(tempEnd) || tempStart.equals(tempEnd)) { result.add(sdf.format(tempStart.getTime())); tempStart.add(Calendar.DAY_OF_YEAR, 1); } return result; } |
/** * 获取周一和周日的结果集 * @param startDate * @param endDate * @return * @throws ParseException */ public static List<Map<String, String>> getBetweenWeeks(String startDate, String endDate) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date start = sdf.parse(startDate);//定义起始日期 Date end = sdf.parse(endDate);//定义结束日期 // List<Date> result = new ArrayList<Date>(); List<Map<String, String>> result = new ArrayList<Map<String, String>>(); Calendar tempStart = Calendar.getInstance(); tempStart.setTime(start); Calendar tempEnd = Calendar.getInstance(); tempEnd.setTime(end); while (tempStart.before(tempEnd) || tempStart.equals(tempEnd)) { Map<String, String> map = new HashMap<String,String>(); int we = tempStart.get(Calendar.DAY_OF_WEEK); if ( we == 2) { map.put("mon", sdf.format(tempStart.getTime())); } if (map.isEmpty()) { //检测map是否为空 tempStart.add(Calendar.DAY_OF_YEAR, 1); }else { tempStart.add(Calendar.DAY_OF_YEAR, 6); map.put("week", sdf.format(tempStart.getTime())); result.add(map); } } return result; } |
附:因为我获取的大部分是String,所以输出都是String格式。 这是转换的工具类,不懂可留言 public static String toDateStr(Date date) { return toDateStr(date, "yyyy-MM-dd"); } |