2016-12-21 35 views
-2

如何獲取星期的第一個和最後一個日期如何根據月份和年份在android 中獲取星期幾的最後幾個日期例如:我們通過月份和年份(2016年3月)然後我想所有星期就像 mar5- mar11,(坐至週五) mar12- mar18, mar19- mar25, mar26-april01如何根據月份和年份在android

請幫我

+2

看看'Calendar' –

+0

更新我的回答 – Noorul

+0

@Ahamed我需要一個像getWeekendsOftheMonth(2,2016)的一些事情二月2016 –

回答

1

如果您正在使用的java.util。你可以使用方法getDay()的日期。它返回Calendar常量,如Calendar.MONDAY。

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

你可以從這個方法去做。

+0

感謝您的回答,但我只想通過月份和年份作爲參數來獲取days.But您正在使用一些長日期。 –

+0

您想要傳遞哪種格式? – Noorul

+0

有些事情喜歡(月,年) –

2

調用此函數可獲得一年中給定月份的有效周對列表中的結果。

例如: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; 
     } 

    } 
+0

,是的,這是實際的解決方案兄弟...它的工作對我來說。謝謝你。 –

+1

不客氣!你能否將我的答案標記爲已接受的答案並註冊? :) –

+0

是的,但我的名聲更低。 –