解析一個日期段之間的所有月份,年份,日期,週數等問題

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();
    }

   
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章