读书人

惯用Calendar 操作日期的方法

发布时间: 2012-08-21 13:00:21 作者: rapoo

常用Calendar 操作日期的方法

package date;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Calendar;import java.util.Date;import java.util.GregorianCalendar;import java.util.LinkedHashMap;/** * 日期公用处理类 *  * @author SongJun * @version 1.3 */public class DateUtil { public static void main(String args[]){  System.out.println(DateUtil.getMonthList("2000-10", "2001-6").toString());  System.out.println(DateUtil.getDayList("2000-8-1", "2000-8-10").toString());  System.out.println(DateUtil.getYearList().toString());  System.out.println(DateUtil.getCurrYear());  Calendar   c   =   Calendar.getInstance();           c.set(Calendar.YEAR, 2010);        c.set(Calendar.MONTH, 5);//11代表12月        c.set(Calendar.DATE, 3);//时间重新设置成2008-1-18  Date d = c.getTime();  System.out.println(DateUtil.getWeekOfYear(d));  System.out.println(DateUtil.getWeekCountInYear(2010));  System.out.println(DateUtil.getFirstDayOfWeek(d));  System.out.println(DateUtil.getFirstDayOfWeek(2008,3));//找第3行,的星期一   }     /**     * 解析一个日期段之间的所有月份     *      * @param beginDateStr     * @param endDateStr     * @return     */    public static ArrayList getMonthList(String beginDateStr, String endDateStr) {        // 指定要解析的时间格式        SimpleDateFormat f = new SimpleDateFormat("yyyy-MM");        // 返回的月份列表        String sRet = "";        // 定义一些变量        Date beginDate = null;        Date endDate = null;        GregorianCalendar beginGC = null;        GregorianCalendar endGC = null;        ArrayList list = new ArrayList();        try {            // 将字符串parse成日期            beginDate = f.parse(beginDateStr);            endDate = f.parse(endDateStr);            // 设置日历            beginGC = new GregorianCalendar();            beginGC.setTime(beginDate);            endGC = new GregorianCalendar();            endGC.setTime(endDate);            // 直到两个时间相同            while (beginGC.getTime().compareTo(endGC.getTime()) <= 0) {//如果参数 Date 等于此 Date,则返回值 0;如果此 Date 在 Date 参数之前,则返回小于 0 的值;如果此 Date 在 Date 参数之后,则返回大于 0 的值。                 sRet = beginGC.get(Calendar.YEAR) + "-"                        + (beginGC.get(Calendar.MONTH) + 1);                list.add(sRet);                // 以月为单位,增加时间                beginGC.add(Calendar.MONTH, 1);            }            return list;        } catch (Exception e) {            e.printStackTrace();            return null;        }    }    /**     * 解析一个日期段之间的所有日期     *      * @param beginDateStr     *            开始日期     * @param endDateStr     *            结束日期     * @return     */    public static ArrayList getDayList(String beginDateStr, String endDateStr) {        // 指定要解析的时间格式        SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd");        // 定义一些变量        Date beginDate = null;        Date endDate = null;        Calendar beginGC = null;        Calendar endGC = null;        ArrayList list = new ArrayList();        try {            // 将字符串parse成日期            beginDate = f.parse(beginDateStr);            endDate = f.parse(endDateStr);            // 设置日历            beginGC = Calendar.getInstance();            beginGC.setTime(beginDate);            endGC = Calendar.getInstance();            endGC.setTime(endDate);            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");            // 直到两个时间相同            while (beginGC.getTime().compareTo(endGC.getTime()) <= 0) {                list.add(sdf.format(beginGC.getTime()));                // 以日为单位,增加时间                beginGC.add(Calendar.DAY_OF_MONTH, 1);            }            return list;        } catch (Exception e) {            e.printStackTrace();            return null;        }    }    /**     *      * 今年开始     * @param 5  过去几年     *                 * @param 10  后来几年     *                 * @return     */    public static ArrayList getYearList() {        ArrayList list = new ArrayList();        Calendar c = null;        c = Calendar.getInstance();        c.setTime(new Date());        int currYear = Calendar.getInstance().get(Calendar.YEAR);        int startYear = currYear - 5;        int endYear = currYear + 10;        for (int i = startYear; i < endYear; i++) {            list.add(new Integer(i));        }        return list;    }    //获得当年    public static int getCurrYear() {        return Calendar.getInstance().get(Calendar.YEAR);    }        /**     * 取得当前日期是多少周     *      * @param date     * @return     */    public static int getWeekOfYear(Date date) {        Calendar c = new GregorianCalendar();        c.setFirstDayOfWeek(Calendar.SUNDAY);//设置一星期的第一天是哪一天;既日历的开头是哪一天        c.setMinimalDaysInFirstWeek(5);//设置一年中第一个星期所需的最少天数 ; 你自己开日历看看这年,头上有几个数字,设置一下;        c.setTime(date);        return c.get(Calendar.WEEK_OF_YEAR);//  哪个是第一周呢? 日历里的第1行;   得到的是这个Date 对象 ,位于日历的第几行    }                     /**     * 得到一年的总周数     * @param year     * @return     */    public static int getWeekCountInYear(int year){        Calendar c = new GregorianCalendar();        c.set(year, Calendar.DECEMBER, 31, 23, 59, 59);        int count = getWeekOfYear(c.getTime());        return count;    }        /**     * 取得当前日期所在周的第一天     *      * @param date     * @return     */    public static Date getFirstDayOfWeek(Date date) {        Calendar c = new GregorianCalendar();        c.setFirstDayOfWeek(Calendar.MONDAY);        c.setTime(date);        c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek()); // Monday 它就会自动找这个星期的        return c.getTime();    }    /**     * 取得当前日期所在周的最后一天     *      * @param date     * @return     */    public static Date getLastDayOfWeek(Date date) {        Calendar c = new GregorianCalendar();        c.setFirstDayOfWeek(Calendar.MONDAY);        c.setTime(date);        c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek() + 6); // Sunday 它就会自动找这个星期的        return c.getTime();    }    /**     * 得到某年某周的第一天     *      * @param year     * @param week     * @return     */    public static Date getFirstDayOfWeek(int year, int week) {        Calendar c = new GregorianCalendar();        c.set(Calendar.YEAR, year);        c.set(Calendar.MONTH, Calendar.JANUARY);        c.set(Calendar.DATE, 1);        Calendar cal = (GregorianCalendar) c.clone();        cal.add(Calendar.DATE, week * 7);        return getFirstDayOfWeek(cal.getTime());    }    /**     * 得到某年某周的最后一天     *      * @param year     * @param week     * @return     */    public static Date getLastDayOfWeek(int year, int week) {        Calendar c = new GregorianCalendar();        c.set(Calendar.YEAR, year);        c.set(Calendar.MONTH, Calendar.JANUARY);        c.set(Calendar.DATE, 1);        Calendar cal = (GregorianCalendar) c.clone();        cal.add(Calendar.DATE, week * 7);        return getLastDayOfWeek(cal.getTime());    }             /**     * 得到某一年周的总数     *      * @param year     * @return     */    public static LinkedHashMap getWeekList(int year) {        LinkedHashMap map = new LinkedHashMap();        Calendar c = new GregorianCalendar();        c.set(year, Calendar.DECEMBER, 31, 23, 59, 59);        int count = getWeekOfYear(c.getTime());        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");        String dayOfWeekStart = "";        String dayOfWeekEnd = "";        for (int i = 1; i <= count; i++) {            dayOfWeekStart = sdf.format(getFirstDayOfWeek(year, i));//格式化 某年某周的第一天            dayOfWeekEnd = sdf.format(getLastDayOfWeek(year, i));////格式化 某年某周的最后一天            map.put(new Integer(i), "第"+i+"周(从"+dayOfWeekStart + "至" + dayOfWeekEnd+")");        }        return map;    }      /**     * 得到某年某月的第一天     * @param year     * @param month     * @return     */    public static Date getFirestDayOfMonth(int year,int month){        month = month-1;        Calendar   c   =   Calendar.getInstance();           c.set(Calendar.YEAR, year);        c.set(Calendar.MONTH, month);                int day = c.getActualMinimum(c.DAY_OF_MONTH);//返回指定日历字段可能拥有的最小值        c.set(Calendar.DAY_OF_MONTH, day);        return c.getTime();            }        /**     * 提到某年某月的最后一天     * @param year     * @param month     * @return     */    public static Date getLastDayOfMonth(int year,int month){        month = month-1;        Calendar   c   =   Calendar.getInstance();           c.set(Calendar.YEAR, year);        c.set(Calendar.MONTH, month);        int day = c.getActualMaximum(c.DAY_OF_MONTH);        c.set(Calendar.DAY_OF_MONTH, day);        return c.getTime();    }    }
?

读书人网 >编程

热点推荐