用于计算日期区间,计算日期区间,例:,(2012-07-
分享于 点击 4096 次 点评:226
用于计算日期区间,计算日期区间,例:,(2012-07-
例:,(2012-07-01~~2012-09-01)返回list
2012-07-31,2012-08-31,2012-09-30,取月底月初无所谓,
package com.ccblife.core.commons;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Calendar;import java.util.Date;import java.util.List;public class DateUtils { /** * <pre> * 返回该月可能的最大日期。 * * <strong>程序范例:</strong> * Date date = new Date(); * Date new = DateUtils.actualMaximumDate(date); * * 例如传入的日期为2008年4月1日, * 则返回的日期是2008年4月30日。 * * </pre> * * @param date * @return */ public static Date actualMaximumDate(Date date) { Calendar calendar = calendar(date); int actualMaximumDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); calendar.set(Calendar.DAY_OF_MONTH, actualMaximumDay); return calendar.getTime(); } /** * <pre> * 返回该月可能的最小日期。 * * <strong>程序范例:</strong> * Date date = new Date(); * Date new = DateUtils.actualMinimumDate(date); * * 例如传入的日期为2008年4月20日, * 则返回的日期是2008年4月1日。 * * </pre> * * @param date * @return */ public static Date actualMinimumDate(Date date) { Calendar calendar = calendar(date); int actualMininumDay = calendar.getActualMinimum(Calendar.DAY_OF_MONTH); calendar.set(Calendar.DAY_OF_MONTH, actualMininumDay); return calendar.getTime(); } /** * 获取制定日期的月数差 * * @param startDate * @param endDate * @return */ public static int monthBetween(Date startDate, Date endDate) { int months = 0; Calendar startDay = calendar(startDate); Calendar endDay = calendar(endDate); int startYear = startDay.get(Calendar.YEAR); int startMonth = startDay.get(Calendar.MONTH); int endYear = endDay.get(Calendar.YEAR); int endMonth = endDay.get(Calendar.MONTH); months = (endYear - startYear) * 12 + (endMonth - startMonth); return months; } /** * <pre> * 将指定日期转换为相应的Calendar对象 * * <strong>程序范例:</strong> * Date date = new Date(); * Calendar calendar = DateUtils.calendar(date); * * </pre> * * @param date * @return */ public static Calendar calendar(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); return calendar; } /** * 返回一个指定日期的Calendar实例 * * @param date * @return */ public static Calendar getCalendar(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); return calendar; } /** * 返回指定日期的默认格式字符串输出 * * @param date * 指定日期 * @return */ public static String getTimeByCustomPattern(Date date, String pattern) { return new SimpleDateFormat(pattern).format(date); } /** * 返回月 * * @return */ public static int getMonth(Date date) { Calendar calendar = getCalendar(date); return calendar.get(Calendar.MONTH) + 1; } /** * 返回年 * * @param date * @return */ public static int getYear(Date date) { Calendar calendar = getCalendar(date); return calendar.get(Calendar.YEAR); } public static Date parse(String str, String pattern) { try { return new SimpleDateFormat(pattern).parse(str); } catch (ParseException e) { throw new RuntimeException("日期格式转换错误", e); } } /** * 获取日期差返回日期List * * @author 周栋 2012-6-11 * @param begDate * 起始月 * @param endDate * 终止月 * @return */ public static List getDate(Date begDate, Date endDate) { int betweenMonth = monthBetween(begDate, endDate); int begMonth = getMonth(begDate); int years = getYear(begDate);// 年 String dates = ""; String months = ""; int month = 0; // 月 int year = 12;// 计算月份用 年 List result = new ArrayList(); for (int i = begMonth; i <= begMonth + betweenMonth; i++) { month = i;// 从当前月开始 if (i > 12) { month = i - year;// 大于12,重置为1,起始年加1 if (month == 1) { years += 1; } if (month >= 12) { year += 12;// 增加1年,为计算月份用 } } if (month < 10) { months = "-0" + month; } else { months = "-" + month; } dates = years + months + "-01"; result.add(DateUtils.actualMaximumDate(DateUtils.parse(dates, "yyyy-MM-dd"))); } return result; } public static void main(String[] args) { Date begDate = parse("2012-07-01", "yyyy-MM-dd"); Date endDate = parse("2012-09-01", "yyyy-MM-dd"); List dateList = getDate(begDate, endDate); for (int i = 0; i < dateList.size(); i++) { System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(dateList.get(i))); } }}//该片段来自于http://byrx.net
用户点评