android获取第N周的日期


获取第N周的日期 使用getWeekDays()方法来获取一周第一天和最后一天的日期 需要定义全局变量 周数
private String year;
    private String month;
    private String day;
    private int weekNum;  //周数
    private int maxweekNum;
/**
     * 根据日期获取第几周
     *
     * @param today String,格式"2013-01-14"
     * @return int 第几周
     */
    private int getWeekNumByDate(String today) {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        Date date = null;
        try {
            date = format.parse(today);
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        Calendar calendar = Calendar.getInstance();
        calendar.setFirstDayOfWeek(Calendar.MONDAY);
        calendar.setTime(date);

        return calendar.get(Calendar.WEEK_OF_YEAR);
    }

    private String getDoubleNum(int num) {
        String doubleNum;
        if (num < 10) {
            doubleNum = "0" + String.valueOf(num);
            return doubleNum;
        } else {
            doubleNum = String.valueOf(num);
            return doubleNum;
        }
    }

    private String getWeekDays() {
        String WeekDays = "";

        int putweek = weekNum;
        int putyear = Integer.parseInt(year);
        if ((weekNum - 1) == 0) { //第一周为去年最后一周
            putyear--;
            putweek = getMaxWeekNumOfYear(putyear);
        } else {
            putweek--;
        }
        WeekDays = String.valueOf(getFirstDayOfWeek(putyear, putweek)) + "-" + String.valueOf(getLastDayOfWeek(putyear, putweek));
        return WeekDays;
    }

    public static int getWeekOfDate(Date dt) {
        int[] weekDays = {7, 1, 2, 3, 4, 5, 6};
        Calendar cal = Calendar.getInstance();
        cal.setTime(dt);
        int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
        if (w < 0)
            w = 0;
        return weekDays[w];
    }

    // 获取某年的第几周的开始日期
    public static String getFirstDayOfWeek(int year, int week) {
        Calendar c = new GregorianCalendar();
        c.set(Calendar.YEAR, year);
        c.set(Calendar.MONTH, Calendar.JANUARY);
        c.setFirstDayOfWeek(Calendar.MONDAY);
        c.set(Calendar.DATE, 1);
        Calendar cal = (GregorianCalendar) c.clone();

        Calendar c1 = new GregorianCalendar();
        c1.set(Calendar.YEAR, year);
        c1.set(Calendar.MONTH, Calendar.JANUARY);
        c1.set(Calendar.DATE, 1);
        c1 = (GregorianCalendar) c1.clone();
        int weekend = getWeekOfDate(c1.getTime());
        if (weekend != 1) {
            cal.add(Calendar.DATE, week * 7);
        } else {
            cal.add(Calendar.DATE, (week - 1) * 7);
        }

        return getFirstDayOfWeek(cal.getTime());

    }

    // 获取某年的第几周的结束日期
    public static String getLastDayOfWeek(int year, int week) {
        Calendar c = new GregorianCalendar();
        c.set(Calendar.YEAR, year);
        c.set(Calendar.MONTH, Calendar.JANUARY);
        c.setFirstDayOfWeek(Calendar.MONDAY);
        c.set(Calendar.DATE, 1);
        Calendar cal = (GregorianCalendar) c.clone();

        Calendar c1 = new GregorianCalendar();
        c1.set(Calendar.YEAR, year);
        c1.set(Calendar.MONTH, Calendar.JANUARY);
        c1.set(Calendar.DATE, 1);
        c1 = (GregorianCalendar) c1.clone();
        int weekend = getWeekOfDate(c1.getTime());
        if (weekend != 1) {
            cal.add(Calendar.DATE, week * 7);
        } else {
            cal.add(Calendar.DATE, (week - 1) * 7);
        }

        return getLastDayOfWeek(cal.getTime());
    }

    // 获取当前时间所在周的开始日期
    public static String getFirstDayOfWeek(Date date) {
        String backdate = "";
        Calendar c = new GregorianCalendar();
        c.setFirstDayOfWeek(Calendar.MONDAY);
        c.setTime(date);
        c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek()); // Monday
        date = c.getTime();
        SimpleDateFormat format = new SimpleDateFormat("MM月dd日");
        backdate = format.format(date);
        return backdate;
    }

    // 获取当前时间所在周的结束日期
    public static String getLastDayOfWeek(Date date) {
        String backdate = "";
        Calendar c = new GregorianCalendar();
        c.setFirstDayOfWeek(Calendar.MONDAY);
        c.setTime(date);
        c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek() + 6); // Sunday
        date = c.getTime();
        SimpleDateFormat format = new SimpleDateFormat("MM月dd日");
        backdate = format.format(date);
        return backdate;
    }

    // 获取当前时间所在年的最大周数
    public static int getMaxWeekNumOfYear(int year) {
        Calendar c = new GregorianCalendar();
        c.set(year, Calendar.DECEMBER, 31, 23, 59, 59);

        return getWeekOfYear(c.getTime());
    }

    // 获取当前时间所在年的周数
    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);
    }