欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

用于计算日期区间,计算日期区间,例:,(2012-07-

来源: javaer 分享于  点击 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
相关栏目:

用户点评