1

可能重复:
如何在 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

推荐的方法是什么?

4

3 回答 3

2

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

于 2012-10-18T09:19:31.047 回答
2
moving.add(Calendar.DATE, 1);

会做你想做的。

Calendar#add(int, int)

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

并且Calendar.DATE

get 和 set 的字段编号,指示月份中的哪一天。

于 2012-10-18T09:21:22.800 回答
1

它是一个简单的使用add()日历的方法。如果要添加年份,请使用 likecalendar.add(Calendar.YEAR, 1);或减少 year calendar.add(Calendar.YEAR, -1);。设置正确的日期时间后,您可以使用SimpleDateFormat.

于 2012-10-18T09:29:52.683 回答