创建日历3年

时间:2012-10-18 09:12:37

标签: java android calendar

  

可能重复:
  How can I increment a date by one day in Java?

public static ArrayList<Calendar> getCalendarsForThreeYears() {
        if (calendars == null) {
            calendars = new ArrayList<Calendar>();
            final Calendar moving = Calendar.getInstance();
            final int targetYear = moving.get(Calendar.YEAR) + 1;
            moving.set(moving.get(Calendar.YEAR) - 1, Calendar.JANUARY, 1);
            final SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yy");
            while (!(moving.get(Calendar.YEAR) == targetYear
                    && moving.get(Calendar.MONTH) == Calendar.DECEMBER && moving
                    .get(Calendar.DAY_OF_MONTH) == 31)) {
                final Calendar c = (Calendar) moving.clone();
                calendars.add(c);
                moving.roll(Calendar.DAY_OF_MONTH, 1);
                System.out.println(sdf.format(c.getTime()));
            }
        }
        return calendars;
    }

我希望这为 3 年创建Calendar个对象(当前,当前和下一个之前的对象)。

然而,这是一个无限循环,因为滚动Calendar.DAY_OF_MONTH当它在月末时不会滚动Calendar.MONTH

推荐的方法是什么?

3 个答案:

答案 0 :(得分:2)

您应该使用moving.add(Calendar.DAY_OF_MONTH, 1);,因为roll会添加天数,但在您添加新的一天之前到达月中的最后一天时不会再添加一个月。 换句话说,如果您的月份是“六月”,您将获得6月1日,2日,3日,30日,那么您将期待7月1日,但您将在6月1日重新开始。

答案 1 :(得分:2)

moving.add(Calendar.DATE, 1);

会做你想做的事。

请参阅Calendar#add(int, int)

  

根据日历的规则,将指定的时间量添加或减去指定的日历字段。

Calendar.DATE

  

获取和设置的字段编号,表示该月的日期。

答案 2 :(得分:1)

它简单地使用了Calendar的add()方法。如果您想添加年份,请使用calendar.add(Calendar.YEAR, 1);或减少年份calendar.add(Calendar.YEAR, -1);。 设置正确的日期时间后,您可以使用SimpleDateFormat将日期转换为格式。