如何获取android中WEEK_OF_YEAR内的日期列表?

时间:2014-01-30 10:54:15

标签: android date calendar android-calendar weekday

例如: 给定月份= 2,并且给定年份= 2014年,我使用以下代码获得周列表。为什么我每个月应用1个默认情况下月份仅以索引开始。

SampleCode:

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

结果: 周=&gt; [8,9,5,6,7]

获得此结果后,如何获得本周的可用日期。 2014年Febraury月,第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

有人指导我获取此列表&lt; 键,日期列表&gt;如上所述结对。

1 个答案:

答案 0 :(得分:0)

为什么你想在最初几周收集,然后找到一周中的几天。 由于您已经循环了一个月的所有日子,您可以创建一个地图,其中以星期为关键,将天数列为值。

以某种方式:

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