如何根据android中的月份和年份获取周的第一个和最后一个日期

时间:2016-12-21 07:40:46

标签: java android

如何根据android中的月份和年份获取周的第一个和最后一个日期 例如:我们通过了一个月和一年(2016年3月),然后我想要所有周 mar-mar11,(坐到星期五) mar12- mar 18, mar19- mar25, mar26-april01

请帮帮我

3 个答案:

答案 0 :(得分:2)

调用此函数可获得一年中给定月份的有效周对列表中的结果。

ex:getWeekStartEnd("December","2016");

结果:[ December3-December9, December10-December16, December17-December23, December24-December30 ]

List<String> getWeekStartEnd (String month , String year) {
        List<String> validWeekPairs = new ArrayList<>();
        SimpleDateFormat sdf = new SimpleDateFormat("dd-MMMMM-yyyy");
        String day = "01";
        try {
            Date date = sdf.parse(day + "-" + month + "-" + year);
            Calendar calendar = Calendar.getInstance();
            calendar.clear();
            calendar.setTime(date);
            calendar.setFirstDayOfWeek(Calendar.SATURDAY);

            List<String> startDayOfWeek = new ArrayList<>();
            List<String> endDayOfWeek = new ArrayList<>();
            int daysInMonth = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
            boolean isStartDaySet = false;
            boolean hasLastDayOfWeek = true;
            for (int currentDay = 01; currentDay <= daysInMonth; currentDay++) {
                Date newDate = sdf.parse(currentDay + "-" + month + "-" + year);
                calendar.setTime(newDate);
                int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
                if (dayOfWeek == Calendar.SATURDAY) {
                    if (hasLastDayOfWeek) {
                        startDayOfWeek.add(month + String.valueOf(currentDay));
                        isStartDaySet = true;
                        hasLastDayOfWeek = false;
                    }
                } else if (dayOfWeek == Calendar.FRIDAY) {
                    if (isStartDaySet) {
                        endDayOfWeek.add(month + String.valueOf(currentDay));
                        hasLastDayOfWeek = true;
                    }
                }


            }


            for (int i = 0; i < endDayOfWeek.size(); i++) {
                validWeekPairs.add(startDayOfWeek.get(i) + "-" + endDayOfWeek.get(i));
            }

            return validWeekPairs;

        } catch (ParseException e) {
            e.printStackTrace();
            return validWeekPairs;

        }catch (Exception e){
            e.printStackTrace();
            return validWeekPairs;
        }

    }

答案 1 :(得分:1)

如果您使用的是java.util.Date,则可以使用getDay()方法。它返回Calendar常量,如Calendar.MONDAY。

答案 2 :(得分:1)

您可以将字符串传递为02,2016

List<String> getWeekendsOftheMonth(String monthYearString) {
         long monthDate;
         List<String> weekEnds = new ArrayList<>();
         SimpleDateFormat simpleDateFormat= new SimpleDateFormat("dd,MM,yyyy");
         try {
               monthYearString="01,".concat(monthYearString);
               monthDate = simpleDateFormat.parse(monthYearString).getTime();
               Calendar calendar = Calendar.getInstance();
               calendar.setTimeInMillis(monthDate);
               int maxDate = calendar.getActualMaximum(Calendar.DATE);
               int minDate = calendar.getActualMinimum(Calendar.DATE);
               for (int i = minDate; i <= maxDate; i++) {
                   calendar.set(Calendar.DATE, i);
                   if (calendar.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY|| calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) {
                     weekEnds.add(convertToDate(calendar.getTimeInMillis()));
                   }
               }
             }catch (Exception e){
                    e.printStackTrace();
            }
    return weekEnds;
 }

    String convertToDate(Long datetime) {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd MMM. yyyy");
        Date date = new Date(datetime);
        return simpleDateFormat.format(date);
    }

你可以用这种方法做到这一点。