当前位置: 代码迷 >> J2EE >> java 最全的日期公共类
  详细解决方案

java 最全的日期公共类

热度:875   发布时间:2013-11-12 22:55:20.0
package com.daimami.com.utils; 
  
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 daimami.com 
 * @version 1.3 
 */
public class DateUtil { 
    /** 
     * 解析一个日期之间的所有月份 
     *  
     * @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) { 
                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; 
        } 
    } 
  
    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 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 
     * @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 int getWeekOfYear(Date date) { 
        Calendar c = new GregorianCalendar(); 
        c.setFirstDayOfWeek(Calendar.MONDAY); 
        c.setMinimalDaysInFirstWeek(7); 
        c.setTime(date); 
  
        return c.get(Calendar.WEEK_OF_YEAR); 
    } 
  
    /** 
     * 得到某年某周的第一天 
     *  
     * @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 
     * @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(); 
    } 
  
    /** 
     * 取得当前日期所在周的第一天 
     *  
     * @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(); 
    } 
  
}

  相关解决方案