Как получить список дат внутри WEEK_OF_YEAR в Android?

Например: учитывая месяц = ​​2 и год = 2014, я получил список недель, используя следующий код. почему я применил 1 для месяца, по умолчанию месяц начинался только с индекса.

Пример кода:

Calendar calendar = Calendar.getInstance();
calendar.set(1, 2014);
calendar.set(2014, 1, 1);
int ndays = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
Set<Integer> weeks = new HashSet<Integer>();
for (int i = 1; i <= ndays; i++) {
weeks.add(calendar.get(Calendar.WEEK_OF_YEAR));
calendar.add(Calendar.DATE, 1);
}

Результат: недели => [8, 9, 5, 6, 7]

После получения этого результата, как я могу узнать, какие даты доступны в неделю года. 2014 Февраль месяц, 5-я неделя с одним днем ​​(суббота). остальные недели имеют семь дней, кроме последней 9-й недели.

Я ожидал формат:

week5 => 1-saturday 
week6 => 2-sunday
         3-monday
         4-tuesday
         5-wednesday
         6-thursday
         7-friday
         8-saturday
week7 => 9-sunday
.
.
.
.
week9 => 23-sunday
         24-monday
         25-tuesday
         26-wednesday
         27-thursday
         28-friday
         29-saturday

кто-то помог мне получить эту пару List‹Key,datelist>, как показано выше.


person Karthik    schedule 30.01.2014    source источник


Ответы (1)


почему вы хотите собрать сначала недели, а потом найти дни недели. Поскольку вы уже перебираете все дни месяца, вы можете просто создать карту, в которой неделя является ключом, а список дней — значением.

Как-то так:

    Calendar calendar = Calendar.getInstance();
    calendar.set(1, 2014);
    calendar.set(2014, 1, 1);
    int ndays = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
    Map<Integer, List<Integer>> map = new TreeMap<Integer, List<Integer>>();
    for (int i = 1; i <= ndays; i++) {
        int week = calendar.get(Calendar.WEEK_OF_YEAR);
        int day = calendar.get(Calendar.DAY_OF_MONTH);
        List<Integer> dayList = map.get(week);
        if (dayList == null) {
            dayList = new ArrayList<Integer>();
            map.put(week, dayList);
        }
        dayList.add(day);
        calendar.add(Calendar.DATE, 1);
    }
    //Check the result:
    for (Map.Entry<Integer, List<Integer>> entry : map.entrySet()) {
        System.out.println("Week: " + entry.getKey());
        for (int day : entry.getValue()) {
            System.out.println("Day: " + day);
        }
    }
person user2808624    schedule 30.01.2014